Mybatis实现分包定义数据库的原理与过程
作者:一懒众衫小QAQ 时间:2024-01-23 12:33:55
前言
业务需求中需要连接两个数据库处理数据,需要用动态数据源。通过了解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。但是需要注意事务的问题。
来源:https://www.cnblogs.com/simple-flw/p/15781319.html
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
Python编写电话薄实现增删改查功能
Python使用pymysql模块操作mysql增删改查实例分析
python提取照片坐标信息的实例代码
Go事务中止时是否真的结束事务解析
Python3.5装饰器原理及应用实例详解
![](https://img.aspxhome.com/file/2023/1/63961_0s.png)
Python configparser模块配置文件过程解析
5步让你的CSS样式表成功减肥
![](https://img.aspxhome.com/file/UploadPic/20098/2/css-01-85s.gif)
python 装饰器重要在哪
XML文件的显示——CSS和XSL
![](https://img.aspxhome.com/file/UploadPic/200710/15/20071015185959969s.jpg)
MATLAB plot函数功能及用法详解
![](https://img.aspxhome.com/file/2023/5/107165_0s.png)
sqlserver isnull在数据库查询中的应用
Python对列表的操作知识点详解
![](https://img.aspxhome.com/file/2023/9/82939_0s.png)
Mootools 1.2教程(5)——事件处理
详解element-ui 表单校验 Rules 配置 常用黑科技
![](https://img.aspxhome.com/file/2023/6/55916_0s.jpg)
Python 如何在字符串中插入变量
tensorflow学习笔记之简单的神经网络训练和测试
![](https://img.aspxhome.com/file/2023/1/114641_0s.jpg)
使用Python写一个小游戏
![](https://img.aspxhome.com/file/2023/1/60501_0s.jpg)
js实现鼠标悬浮给图片加边框的方法
Python使用filetype精确判断文件类型
MySQL加密和解密实例详解
![](https://img.aspxhome.com/file/2023/5/121565_0s.png)