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实现分包定义数据库的更多相关文章

  1. spring+mybatis的多源数据库配置实战

    前言: 关于spring+mybatis的多源数据库配置, 其实是个老生常谈的事情. 网上的方案出奇的一致, 都是借助AbstractRoutingDataSource进行动态数据源的切换. 这边再无 ...

  2. 玩转SpringBoot之整合Mybatis拦截器对数据库水平分表

    利用Mybatis拦截器对数据库水平分表 需求描述 当数据量比较多时,放在一个表中的时候会影响查询效率:或者数据的时效性只是当月有效的时候:这时我们就会涉及到数据库的分表操作了.当然,你也可以使用比较 ...

  3. 使用SSM 或者 springboot +mybatis时,对数据库的认证信息(用户名,密码)进行加密。

    通常情况下,为了提高安全性,我们需要对数据库的认证信息进行加密操作,然后在启动项目的时候,会自动解密来核对信息是否正确.下面介绍在SSM和springboot项目中分别是怎样实现的. 无论是使用SSM ...

  4. Mybatis关联查询和数据库不一致问题分析与解决

    Mybatis关联查询和数据库不一致问题分析与解决 本文的前提是,确定sql语句没有问题,确定在数据库中使用sql和项目中结果不一致. 在使用SpringMVC+Mybatis做多表关联时候,发现也不 ...

  5. MyBatis系列二 之 数据库列名于程序实体类中字段名称不一致

    MyBatis系列二  之   数据库列名于程序实体类中字段名称不一致 情景:当数据库中的列名与我们程序实体类中的字段名称不一致         使用ResultMap节点配置信息  在映射文件中  ...

  6. 2.mybatis 的列名与数据库字段不对应

    mybatis 的列名与数据库字段不对应 1.别名 映射文件 : BlogMapper.xml <mapper namespace="com.xms.mybatis.mapper.Bl ...

  7. kettle中使用javascript步骤和fireToDB函数实现自己定义数据库查询

    kettle中使用javascript步骤和fireToDB函数实现自己定义数据库查询 如果你须要实现非传统的数据库查询操作.为了讨论这样的情景,我们如果你须要读取数据库中的正則表達式,然后检查输入的 ...

  8. mybatis+oracle 完成插入数据库,并将主键返回的注意事项

    mybatis+oracle 完成插入数据库,并将主键返回的注意事项一条插入语句就踩了不少的坑,首先我的建表语句是: create table t_openapi_batch_info( BATCH_ ...

  9. JavaWeb_(Mybatis框架)JDBC操作数据库和Mybatis框架操作数据库区别_一

    系列博文: JavaWeb_(Mybatis框架)JDBC操作数据库和Mybatis框架操作数据库区别_一 传送门 JavaWeb_(Mybatis框架)使用Mybatis对表进行增.删.改.查操作_ ...

随机推荐

  1. DevOps到底是什么意思?

    目录 一.方法论 二.DevOps的起源 三.DevOps到底是什么 四.DevOps的发展现状 五.DevOps与虚拟化.容器.微服务 一.方法论 提到DevOps这个词,我相信很多人一定不会陌生. ...

  2. 在项目中引入百度的ueditor编辑器

    第一步:解压ueditor压缩包 在项目中按顺序引入三个文件 <script type="text/javascript" charset="utf-8" ...

  3. GSS API

    Detail:http://docs.oracle.com/cd/E24847_01/html/E22200/overview-61.html GSS-API 介绍 使用 GSS-API,程序员在编写 ...

  4. [BUUCTF]PWN15——[BJDCTF 2nd]one_gadget

    [BUUCTF]PWN15--[BJDCTF 2nd]one_gadget 附件 步骤: 例行检查,64位,保护全开 nc试运行一下程序,看看情况,它一开始给了我们一个地址,然后让我们输入one ga ...

  5. netcore XmlDocument 使用Load和Save方法

    string path ="C://xxx/file" XmlDocument xmlDoc = new XmlDocument(); #if NET462 xmlDoc.Load ...

  6. 【LeetCode】694. Number of Distinct Islands 解题报告 (C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 DFS 日期 题目地址:https://leetcod ...

  7. 【LeetCode】1023. Binary String With Substrings Representing 1 To N 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 日期 题目地址:https://leetcode.c ...

  8. 【LeetCode】203. Remove Linked List Elements 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 双指针 递归 日期 题目地址:https://lee ...

  9. 【LeetCode】216. Combination Sum III 解题报告(Python & C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述: 题目大意 解题方法 方法一:DFS 方法二:回溯法 日期 题目地址:h ...

  10. LeetCode1237找出给定方程的正整数解

    题目 给定方程f和值z,找出给定方程f(x,y)=z的正整数解x,y.f(x,y)关于x.y都是严格单调的. 题目保证 f(x, y) == z 的解处于 1 <= x, y <= 100 ...