Mybatis实现分包定义数据库
2022-01-09 16:45
561 查看
Mybatis实现分包定义数据库
背景
业务需求中需要连接两个数据库处理数据,需要用动态数据源。通过了解mybatis的框架,计划 使用分包的方式进行数据源的区分。
原理
前提:
我们使用mybatis都会有四个步骤
1:构建
SqlSessionFactory
2:通过
SqlSessionFactory获取到
sqlSession对象
3:通过
sqlSession对象获取
Mapper的动态代理对象
4:通过执行动态代理对象获取返回值
其实点开sqlSessionFactory就的
Configuration对象中的
Environment对象绑定了我们的
dataSource对象
同样,我们通过debug发现,动态代理后的mapper对象是同样持有
Configuration对象,绑定我们的连接信息。
猜想
需要分包实现不同数据源的话,需要对不同的mapper指定不同的
sqlSessionFactroy,查看
mapperScan的注解源码,
通过理解注释,我们是可以指定maper动态代理对象的
sqlSessionFactory对象的。然后结果
basePackages就可以对不同的包使用不同的
sqlSessionFactory从而实现不同包使用不同的数据源。
实现
1:定义两个数据源
两个数据源分别命名位ds01,ds02,这里采用都是德鲁伊的数据库连接池。为了简介,详细配置没有展示了。
2:定义两个SqlSessionFactory
定义两个
sqlSessionFactory,分别绑定两个数据源。
3:不同包实现绑定不同的sqlSessionFactory
通过
@MapperScan指定扫描的包,通知指定
SqlSessionFactory
@MapperScan(basePackages = "com.lenven.demo.dao.ds02",sqlSessionFactoryRef = "salveSqlSessionFactory") @MapperScan(basePackages = "com.lenven.demo.dao.ds01",sqlSessionFactoryRef = "masterSqlSessionFactory")
4:测试
对两个不同的包的mapper测试,都可以正确查询出数据
拓展:
通过实现
AbstractRoutingDataSource也可以实现动态数据源。
该类实现
DataSource的接口,可以配置对各数据源在
@Nullable private Map<Object, DataSource> resolvedDataSources;
这个属性里面。
让后通过暴露一个
determineCurrentLookupKey获取需要使用的数据源的key。但是需要注意事务的问题。
相关文章推荐
- 重学 Java 设计模式:实战代理模式「模拟mybatis-spring中定义DAO接口,使用代理类方式操作数据库原理实现场景」
- spring多数据源的处理 mybatis实现跨库查询 实现Myibatis动态sql跨数据库的处理 Spring动态配置多数据源,即在大型应用中对数据进行切分,并且采用多个数据库实例进行管理,这样
- 未测试---- mysql+spring+mybatis实现数据库读写分离[代码配置]
- mybatis实战之路,疯狂的数据库操作框架、动态sql实现CRUD及带条件的增CRUD
- SpringBoot整合mybatis、shiro、redis实现基于数据库的细粒度动态权限管理系统实例
- Mybatis原理解析(一)--java.sql数据库操作的基本实现方式
- ASP中非数据库实现数据对象的定义及处理
- mybatis框架下物理分页的实现(整个工程采用的是springmvc、spring、mybatis框架,数据库是mysql数据库)
- java excel完整实现导入到数据库的功能开发试题导入功能 整合springmvc mybatis 处理
- mybatis- spring 批量实现数据导入数据库
- Spring+SpringMVC+MyBatis实现数据库连接的登录功能
- Spring整合Mybatis实现对数据库的增删改查
- 基于全注解方式实现MyBatis链接数据库的demo
- mybatis“集合嵌套查询”和“集合嵌套结果”两种方法实现数据库一对多关系
- java自定义注解、mybatis 插件 实现数据库 分库分表
- myBatis配置实现数据库字段下划线映射到java对象的驼峰式命名属性
- mybatis百万数据写入数据库分页优化分批处理java代码实现
- spring boot + mybatis如何实现数据库的读写分离
- mybatis实现对数据库的基本操作
- 实现类似Feign和mybatis的只定义接口的动态代理