Mybatis实现分包定义数据库的原理与过程

作者:一懒众衫小QAQ 时间:2024-01-23 12:33:55 

前言

业务需求中需要连接两个数据库处理数据,需要用动态数据源。通过了解mybatis的框架,计划 使用分包的方式进行数据源的区分。

原理

前提:

我们使用mybatis都会有四个步骤

1:构建SqlSessionFactory

2:通过SqlSessionFactory 获取到sqlSession 对象

3:通过sqlSession对象获取Mapper的 * 对象

4:通过执行 * 对象获取返回值

其实点开sqlSessionFactory就的Configuration对象中的Environment对象绑定了我们的dataSource对象

Mybatis实现分包定义数据库的原理与过程

同样,我们通过debug发现, * 后的mapper对象是同样持有Configuration对象,绑定我们的连接信息。

Mybatis实现分包定义数据库的原理与过程

猜想

需要分包实现不同数据源的话,需要对不同的mapper指定不同的sqlSessionFactroy,查看mapperScan的注解源码,

Mybatis实现分包定义数据库的原理与过程

通过理解注释,我们是可以指定maper * 对象的sqlSessionFactory对象的。然后结果basePackages就可以对不同的包使用不同的sqlSessionFactory从而实现不同包使用不同的数据源。

实现

1:定义两个数据源

Mybatis实现分包定义数据库的原理与过程

两个数据源分别命名位ds01,ds02,这里采用都是德鲁伊的数据库连接池。为了简介,详细配置没有展示了。

2:定义两个SqlSessionFactory

定义两个sqlSessionFactory,分别绑定两个数据源。

Mybatis实现分包定义数据库的原理与过程

Mybatis实现分包定义数据库的原理与过程

3:不同包实现绑定不同的sqlSessionFactory

通过@MapperScan指定扫描的包,通知指定SqlSessionFactory

@MapperScan(basePackages = "com.lenven.demo.dao.ds02",sqlSessionFactoryRef = "salveSqlSessionFactory")
@MapperScan(basePackages = "com.lenven.demo.dao.ds01",sqlSessionFactoryRef = "masterSqlSessionFactory")

4:测试

对两个不同的包的mapper测试,都可以正确查询出数据

拓展:

通过实现

Mybatis实现分包定义数据库的原理与过程

AbstractRoutingDataSource也可以实现动态数据源。

该类实现DataSource的接口,可以配置对各数据源在

@Nullable
   private Map<Object, DataSource> resolvedDataSources;

这个属性里面。

让后通过暴露一个determineCurrentLookupKey 获取需要使用的数据源的key。但是需要注意事务的问题。

来源:https://www.cnblogs.com/simple-flw/p/15781319.html

标签:mybatis,分包,定义
0
投稿

猜你喜欢

  • Python编写电话薄实现增删改查功能

    2021-07-14 21:28:18
  • Python使用pymysql模块操作mysql增删改查实例分析

    2024-01-24 03:56:48
  • python提取照片坐标信息的实例代码

    2023-06-01 16:37:10
  • Go事务中止时是否真的结束事务解析

    2023-07-07 11:35:35
  • Python3.5装饰器原理及应用实例详解

    2023-11-07 23:15:51
  • Python configparser模块配置文件过程解析

    2023-03-04 09:35:49
  • 5步让你的CSS样式表成功减肥

    2009-08-02 21:27:00
  • python 装饰器重要在哪

    2023-12-30 12:13:29
  • XML文件的显示——CSS和XSL

    2007-10-15 18:48:00
  • MATLAB plot函数功能及用法详解

    2022-09-08 15:55:21
  • sqlserver isnull在数据库查询中的应用

    2011-12-01 10:30:25
  • Python对列表的操作知识点详解

    2022-05-08 09:06:39
  • Mootools 1.2教程(5)——事件处理

    2008-11-19 16:33:00
  • 详解element-ui 表单校验 Rules 配置 常用黑科技

    2023-08-17 17:42:47
  • Python 如何在字符串中插入变量

    2023-02-16 11:06:27
  • tensorflow学习笔记之简单的神经网络训练和测试

    2021-02-18 20:28:14
  • 使用Python写一个小游戏

    2023-07-20 17:31:07
  • js实现鼠标悬浮给图片加边框的方法

    2024-04-18 09:40:22
  • Python使用filetype精确判断文件类型

    2023-07-09 12:30:12
  • MySQL加密和解密实例详解

    2024-01-16 01:57:38
  • asp之家 网络编程 m.aspxhome.com