当前位置: 首页 > 网络应用技术

Mybatis-Plus集成了许多数据,如何播放?

时间:2023-03-06 22:03:32 网络应用技术

  这篇文章已包含在我的GitHub选择中,欢迎使用Star:https://github.com/yehongzhi/learningsummary

  在正常开发中,一个项目通常会遇到多个数据源。例如,数据源A中的某些数据,数据源B中的数据的另一部分,业务需要从接口中合并这两个部分。

  还是操作数据源A后,您需要切换数据源并操作数据源B.如何达到此类需求?

  实际上,Mybatis-Plus有相关的实现。它是基于Springboot的启动子快速整合了数据次数。

  首先,没有证明Springboot+Mybatis+Mybatis-Plus的项目。它将不会被证明,这是相对简单的。首先介绍了如何使用数据源的方法。

  第二步是修改应用程序配置文件并配置数据源。

  第三步是用@ds Annotation.ther.generally我想贴上映射器接口。注释的值是数据源的名称。

  如图所示,现在有两个数据源:

  与从属数据源的用户表相对应的映射器接口,如下:

  与主数据源的商品表相对应的映射器接口,如下:

  然后,我们编写一项用于测试的服务:

  控制器接口,如下:

  启动项目,然后请求接口地址。我们可以看到结果包含两个数据源中发现的数据查询:

  查看源代码,您可以知道它是在类和方法中使用的。

  服务或映射器上的滞后。优先级在类上方的方法上标记。

  什么是设置和切换数据源,首先查看一个示例:

  启动项目,然后请求地址以发现仍然可以找到结果,这证明它支持本机切换数据源。

  让我们看一个示例:首先,定义一个插入对象insertrequest:

  然后将@transactional注释添加到服务类中,然后将数据插入两个数据源的表中::

  然后将输入方法添加到控制器接口层:

  启动项目,测试,结果是500个错误:

  如果我们查看控制台日志,我们会发现问题:

  我了解到, @Transactional是本地交易管理,而不是分布式交易,因此我们无法在切换数据源的方式中添加@transactional注释。

  在不使用分布式交易的情况下,我们只能让他们管理自己的事务,在中间添加一层服务。

  更改后,让我们再次测试,我们可以看到数据源切换成功。

  如果您需要使用分布式交易,则官方网站还表明,提供基于SEATA的分布式交易解决方案,此处将不会证明。读者有兴趣尝试自己。

  我们仍然在事实中讲话,首先是整个示例:

  启动项目,测试并找到一个错误:

  原因是数据源切换的基本原理由AOP实现。如果调用了内部方法,则不会使用AOP,因此无法切换数据源。

  解决方案是将GetCommodityList()方法提及另一类。

  动态数据实际上具有很多功能,而无需引入。我不会一个人介绍他们。如果您有兴趣,您可以从官方网站上学习。大多数数据在项目开发中非常普遍,因此我认为学习此插件仍然很有用。如果您以后有时间,我将把动态datasource源代码解释为探索底层的实现原理。

  非常感谢您的阅读。我希望这篇文章可以帮助您。

  功能有限,如果有任何错误或不当的事情,请批评并纠正它们!