Spring Boot入门(20):轻松搞定多数据源配置,Spring Boot与Mybatis-Plus的完美结合!

前言

本文将介绍如何在Spring Boot框架下使用mybatis-plus实现多数据源配置。多数据源配置是一个常见的需求,在实际项目中也经常遇到,因此掌握多数据源配置的技巧是非常重要的。

摘要

本文将为大家介绍如何使用Spring Boot和mybatis-plus实现多数据源配置。我们将分别介绍如何配置多个数据源以及如何使用mybatis-plus来操作这些数据源。除此之外,我们还将给出一个简单的测试用例来验证代码的正确性。

正文

添加依赖和配置文件

首先,我们需要在pom.xml文件中添加依赖:

        <!--配置多数据源-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
            <version>3.5.0</version>
        </dependency>

配置多个数据源

在Spring Boot框架下配置多个数据源只需要在application.properties文件中加入多组数据源的配置即可。例如,我们配置两个数据源,分别为db1和db2:

spring:
  datasource:
    dynamic:
      primary: master #设置默认的数据源或者数据源组,默认值即为master
      strict: false #严格匹配数据源,默认false. true未匹配到指定数据源时抛异常,false使用默认数据源
      datasource:
        master:
          driver-class-name: com.mysql.cj.jdbc.Driver # 3.2.0开始支持SPI可省略此配置
          url: jdbc:mysql://localhost:3306/springboot_db?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf-8
          username: root
          password: 123456
        slave_1:
          driver-class-name: com.mysql.cj.jdbc.Driver # 3.2.0开始支持SPI可省略此配置
          url: jdbc:mysql://127.0.0.1:3306/test_db2?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf-8
          username: root
          password: 123456

在以上配置中,我们为两个数据源分别配置了url、username和password。需要注意的是,我们在url中使用了不同的数据库名称来区分不同的数据源。

示例截图如下:
在这里插入图片描述

配置mybatis-plus

在配置mybatis-plus上,我们需要创建两个数据源的配置类,分别为db1和db2。这两个配置类需要分别继承AbstractDataSourceConfig,并且需要通过使用@MapperScan注解来初始化mybatis-plus的SqlSessionFactory和MapperScannerConfigurer。

我们这里给出db1数据源的代码示例:

@Configuration
@MapperScan(basePackages = {"com.example.db1.mapper"}, sqlSessionTemplateRef = "db1SqlSessionTemplate")
public class Db1DataSourceConfig extends AbstractDataSourceConfig {
    
    @Autowired
    @Qualifier("db1DataSource")
    private DataSource db1DataSource;

    @Bean(name = "db1SqlSessionFactory")
    public SqlSessionFactory db1SqlSessionFactory(@Qualifier("db1DataSource") DataSource dataSource) throws Exception {
        return super.createSqlSessionFactory(dataSource);
    }

    @Bean(name = "db1SqlSessionTemplate")
    public SqlSessionTemplate db1SqlSessionTemplate(@Qualifier("db1SqlSessionFactory") SqlSessionFactory sqlSessionFactory) {
        return new SqlSessionTemplate(sqlSessionFactory);
    }
    
    @Override
    public DataSource dataSource() {
        return db1DataSource;
    }

    @Override
    public MybatisPlusProperties getMybatisPlusProperties() {
        MybatisPlusProperties properties = new MybatisPlusProperties();
        properties.setMapperLocations(new String[]{"classpath:mapper/db1/**/*.xml"});
        return properties;
    }
}

在以上代码中,我们使用@MapperScan注解来扫描指定目录下的Mapper接口,同时指定SqlSessionTemplate使用的SqlSessionFactory名称(即“db1SqlSessionFactory”)。我们在配置中也指定了Mapper文件的路径。

类似地,在db2数据源的配置中,我们只需要修改相关的名称即可。

编写Mapper接口

在编写Mapper接口时,我们需要指定使用的数据源。我们可以通过在Mapper接口上加上@DS注解来指定当前执行的方法使用的数据源。例如:

@DS("db1")
public interface UserMapperDb1 extends BaseMapper<User> {
    //...
}

@DS("db2")
public interface UserMapperDb2 extends BaseMapper<User> {
    //...
}

以上代码中,我们分别为db1和db2数据源编写了一个UserMapper接口,并通过@DS注解指定了使用的数据源。

测试用例

最后,我们为我们的代码编写一个简单的测试用例来验证代码的正确性。我们可以在测试用例中通过使用@Autowired注入指定的Mapper接口来操作对应的数据源。例如:

@RunWith(SpringRunner.class)
@SpringBootTest
public class MultiDataSourceTest {

    @Autowired
    private UserMapperDb1 userMapperDb1;

    @Autowired
    private UserMapperDb2 userMapperDb2;

    @Test
    public void test() {
        User user1 = new User();
        user1.setName("张三");
        user1.setAge(18);
        userMapperDb1.insert(user1); // 保存至db1

        User user2 = new User();
        user2.setName("李四");
        user2.setAge(20);
        userMapperDb2.insert(user2); // 保存至db2

        List<User> userList1 = userMapperDb1.selectList(null);
        List<User> userList2 = userMapperDb2.selectList(null);

        Assert.assertEquals(userList1.size(), 1); // db1中应有1条记录
        Assert.assertEquals(userList2.size(), 1); // db2中应有1条记录
    }
}

在以上测试用例中,我们使用了两个Mapper接口来分别向db1和db2数据源中插入了一条记录,并在之后使用了两个Mapper接口来查询各自的数据源中的记录条数。

全文小结

本文介绍了如何在Spring Boot框架下使用mybatis-plus实现多数据源配置。具体地,我们分别说明了如何配置多个数据源、如何配置mybatis-plus以及如何编写Mapper接口和测试用例。实践证明,多数据源配置在实际业务场景中非常常见,通过本文的学习,读者可以掌握多数据源配置的技巧,对于日后的项目开发工作也将会有很大的帮助。

  • 26
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值