温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

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

发布时间:2022-01-10 14:16:55 来源:亿速云 阅读:141 作者:iii 栏目:开发技术

这篇“Mybatis实现分包定义数据库的原理与过程是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Mybatis实现分包定义数据库的原理与过程是什么”文章吧。

    前言

    业务需求中需要连接两个数据库处理数据,需要用动态数据源。通过了解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。但是需要注意事务的问题。

    以上就是关于“Mybatis实现分包定义数据库的原理与过程是什么”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注亿速云行业资讯频道。

    向AI问一下细节

    免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

    AI