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

 更新时间:2022年01月10日 11:28:35   作者:一懒众衫小QAQ  
这篇文章主要给大家介绍了关于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。但是需要注意事务的问题。

总结

到此这篇关于Mybatis实现分包定义数据库的原理与过程的文章就介绍到这了,更多相关Mybatis分包定义数据库内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • LinkedHashMap如何保证有序问题

    LinkedHashMap如何保证有序问题

    这篇文章主要介绍了LinkedHashMap如何保证有序问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11
  • 使用JAVA实现http通信详解

    使用JAVA实现http通信详解

    本文给大家汇总介绍了几种java实现http通讯的方法,非常的简单实用,有需要的小伙伴可以参考下。
    2015-08-08
  • 如何更好的使用Java8中方法引用详解

    如何更好的使用Java8中方法引用详解

    在Java8中,我们可以直接通过方法引用来简写lambda表达式中已经存在的方法,这种特性就叫做方法引用(Method Reference)。下面这篇文章主要给大家介绍了关于如何更好的使用Java8中方法引用的相关资料,需要的朋友可以参考下。
    2017-09-09
  • @Accessors(chain = true)注解报错的解决方案

    @Accessors(chain = true)注解报错的解决方案

    这篇文章主要介绍了@Accessors(chain = true)注解报错的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-06-06
  • 史上最简单的MyBatis动态SQL入门示例代码

    史上最简单的MyBatis动态SQL入门示例代码

    动态sql,可以根据用户对字段选择和输入,动态生成一条sql执行。接下来通过本文给大家分享MyBatis动态SQL入门示例代码,一起看看吧
    2017-03-03
  • 必知必会的SpringBoot实现热部署两种方式

    必知必会的SpringBoot实现热部署两种方式

    这篇文章主要为大家介绍了必知必会的SpringBoot实现热部署两种方式详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-04-04
  • java计算两个日期之间相差天数的4种方法详解

    java计算两个日期之间相差天数的4种方法详解

    这篇文章主要给大家介绍了关于java计算两个日期之间相差天数的4种方法,本文简短地介绍java中多种方式求两个日期的差量,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2023-09-09
  • Sentinel中实现限流的两种方法

    Sentinel中实现限流的两种方法

    本文给大家介绍了Sentinel中实现限流的两种方法,限流是一种通过控制系统对外提供的资源、服务或接口的访问数量或速率,以保护系统免受过载的一种策略,需要的朋友可以参考下
    2024-02-02
  • SpringBoot访问外部文件及默认路由问题

    SpringBoot访问外部文件及默认路由问题

    这篇文章主要介绍了SpringBoot访问外部文件及默认路由问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11
  • Java利用Request请求如何获取IP地址对应的省份、城市详解

    Java利用Request请求如何获取IP地址对应的省份、城市详解

    之前已经给大家介绍了关于Java用Request请求获取IP地址的相关内容,那么下面这篇文章将给大家进入深入的介绍,关于Java利用Request请求如何获取IP地址对应省份、城市的相关资料,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-10-10

最新评论