Mybatis-Plus整合多数据源

本文探讨了在SpringBoot项目中如何利用Mybatis-Plus实现多数据源的整合,包括配置数据源、使用@DS注解切换数据源以及解决在事务处理和方法调用中的问题。通过示例展示了在Service和Mapper接口上的数据源切换,并提醒了在分布式事务场景下的注意事项。
摘要由CSDN通过智能技术生成

文章已收录到我的Github精选,欢迎Star:https://github.com/yehongzhi/learningSummary

提出问题

在平时开发中,经常会遇到在一个项目里需要使用多个数据源的情况,比如有一部分数据在数据源A,另一部分数据在数据源B,业务需要把这两部分的数据做合并然后从接口返回。

又或者操作完数据源A后,需要切换数据源,操作数据源B。这样的需求,怎么实现?

解决问题

其实在mybatis-plus就有相关的实现,是一个基于SpringBoot快速集成多数据源的启动器。

首先要搭建一个springBoot+Mybatis+Mybatis-Plus的项目,搭建项目就不演示了,比较简单。这里讲怎么使用多数据源,首先引入dynamic-datasource-spring-boot-starter

<dependency>
  <groupId>com.baomidou</groupId>
  <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
  <version>${version}</version><!--版本号-->
</dependency>

第二步,修改application配置文件,配置数据源。

# 默认数据源
spring.datasource.dynamic.primary=master
# 数据源A
spring.datasource.dynamic.datasource.master.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.dynamic.datasource.master.url=jdbc:mysql://192.168.0.101:3306/user?createDatabaseIfNotExist=true
spring.datasource.dynamic.datasource.master.username=root
spring.datasource.dynamic.datasource.master.password=
# 数据源B
spring.datasource.dynamic.datasource.slave.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.dynamic.datasource.slave.url=jdbc:mysql://192.168.0.102:3306/user?createDatabaseIfNotExist=true
spring.datasource.dynamic.datasource.slave.username=root
spring.datasource.dynamic.datasource.slave.password=

第三步,使用@DS注解切换数据源。一般我喜欢放在Mapper接口上面。注解的值则是数据源的名称。

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

slave数据源的user表对应的Mapper接口,如下:

@Mapper
@DS("slave")
public interface UserMapper extends BaseMapper<User> {
   
}

master数据源的commodity表对应的Mapper接口,如下:

@Mapper
@DS("master")
public interface CommodityMapper extends BaseMapper<Commodity> {
   
}

接着我们写一个Service进行测试:

@Service
public class DynamicServiceImpl implements DynamicService {
   

    @Resource
    private UserMapper userMapper;

    @Resource
    private CommodityMapper commodityMapper;

    @Override
    public ResultObject getUserListAndCommodityList() {
   
        //查询slave数据源
        List<User> userList = userMapper.selectList(null);
        //查询master数据源
        List<Commodity> commodityList = commodityMapper.selectList(null);
        //把两个数据源查询的整合到一起返回
        ResultObject resultObject = new <
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值