前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >轻松搞定多数据源配置,Spring Boot与Mybatis-Plus的完美结合!

轻松搞定多数据源配置,Spring Boot与Mybatis-Plus的完美结合!

作者头像
bug菌
修改2023-09-27 16:23:57
4.2K1
修改2023-09-27 16:23:57
举报
文章被收录于专栏:《项目实战教学》

🏆本文收录于 《Spring Boot从入门到精通》 ,专门攻坚指数提升

本专栏致力打造最硬核 Spring Boot 从零基础到进阶系列学习内容,🚀均为全网独家首发,打造精品专栏,专栏持续更新中…欢迎大家订阅持续学习。


代码语言:javascript
复制
环境说明:Windows10 + Idea2021.3.2 + Jdk1.8 + SpringBoot 2.3.1.RELEASE

前言

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

摘要

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

正文

添加依赖和配置文件

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

代码语言:javascript
复制
        <!--配置多数据源-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
            <version>3.5.0</version>
        </dependency>

示例截图如下:

配置多个数据源

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

代码语言:javascript
复制
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数据源的代码示例:

代码语言:javascript
复制
@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注解来指定当前执行的方法使用的数据源。例如:

代码语言:javascript
复制
@DS("db1")
public interface UserMapperDb1 extends BaseMapper<User> {
    //...
}

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

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

测试用例

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

代码语言:javascript
复制
@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接口和测试用例。实践证明,多数据源配置在实际业务场景中非常常见,通过本文的学习,读者可以掌握多数据源配置的技巧,对于日后的项目开发工作也将会有很大的帮助。


我正在参与2023腾讯技术创作特训营第二期有奖征文,瓜分万元奖池和键盘手表

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 摘要
  • 正文
    • 添加依赖和配置文件
      • 配置多个数据源
        • 配置mybatis-plus
          • 编写Mapper接口
            • 测试用例
            • 全文小结
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档