Springboot+mybatisplus配置多数据源+分页

前言

最近工作需要配置多数据源,然后又想使用mybatisplus的分页插件,一开始分页插件一直不生效,查阅一些资料后解决了这个问题。写下这篇文章帮助其他有需要的人,同时做一个记录。

一、引入相关依赖

要使用mybatisplus的话需要导入mybatisplus的依赖包。

另外,3.4.3.4版本要使用分页插件的话,需要引入mybatisplus的扩展包。

xml 复制代码
    <!-- mybatisplus -->
    <dependency>
      <groupId>com.baomidou</groupId>
      <artifactId>mybatis-plus-boot-starter</artifactId>
      <version>3.4.3.4</version>
      <scope>compile</scope>
    </dependency>
    <!-- 分页插件 -->
    <dependency>
      <groupId>com.baomidou</groupId>
      <artifactId>mybatis-plus-extension</artifactId>
      <version>3.4.3.4</version>
    </dependency>

二、配置多数据源

application.yml中配置多数据源的话,就不能像单数据源一样只写一个数据库配置了。

写多个数据源配置的话,还要记得数据库连接不能使用url,应该使用jdbc-url

然后给这个每个数据库一个命名,如以下代码所示,命名为ds1ds2

yaml 复制代码
spring:
  datasource:
    ds1:
      jdbc-url: 
      username: root
      password: 
      driver-class-name: com.mysql.cj.jdbc.Driver
    ds2:
      jdbc-url: 
      username: root
      password: 
      driver-class-name: com.mysql.cj.jdbc.Driver

然后,单数据库的话,springboot可以直接读取,但多数据源就需要自己写配置来读取配置信息。

java 复制代码
@Configuration
@MapperScan(basePackages = "org.example.mapper.xycmall", sqlSessionFactoryRef = "sqlSessionFactory1")
public class Mybatis1Config {

    @Bean(name = "ds1")
    @ConfigurationProperties(prefix = "spring.datasource.ds1")
    public DataSource dataSource(){
        return DataSourceBuilder.create().build();
    }

    @Bean(name = "sqlSessionFactory1")
    public SqlSessionFactory slaveSqlSessionFactory(@Qualifier("ds1") DataSource dataSource, MybatisPlusInterceptor mybatisPlusInterceptor) throws Exception {
        MybatisSqlSessionFactoryBean bean = new MybatisSqlSessionFactoryBean();
        bean.setDataSource(dataSource);
        bean.setPlugins(mybatisPlusInterceptor);
        bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:*/mapper/xycmall/*.xml"));
        return bean.getObject();
    }
}
java 复制代码
@Configuration
@MapperScan(basePackages = "org.example.mapper.test", sqlSessionFactoryRef = "sqlSessionFactory2")
public class Mybatis2Config {

    //首先配置数据库连接信息
    @Bean(name = "ds2")
    @ConfigurationProperties(prefix = "spring.datasource.ds2")
    public DataSource dataSource(){
        return DataSourceBuilder.create().build();
    }


    //然后配置数据库连接工厂,每个数据库对应一个工厂
    @Bean(name = "sqlSessionFactory2")
    public SqlSessionFactory slaveSqlSessionFactory(@Qualifier("ds2") DataSource dataSource, MybatisPlusInterceptor mybatisPlusInterceptor) throws Exception {
        //因为是mybatisPlus,所以用MybatisSqlSessionFactoryBean
        MybatisSqlSessionFactoryBean bean = new MybatisSqlSessionFactoryBean();
        bean.setDataSource(dataSource);
        //配置插件,不然分页插件无效
        bean.setPlugins(mybatisPlusInterceptor);
        bean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:*/mapper/test/*.xml"));
        return bean.getObject();
    }
}
java 复制代码
@Configuration
public class MybatisPlusConfig {

    /**
     * 添加分页插件
     */
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor());
        return interceptor;
    }
}

如上述代码一样,读取了ds1ds2的数据库配置信息。并且,扫描的包范围也不一样,org.example.mapper.xycmall包下的mapper使用的是ds1的数据库。org.example.mapper.test使用的是ds2的数据库。

然后因为要使用mybatisplus,所以创建的SqlSessionFactory 返回的是MybatisSqlSessionFactoryBean

接着因为要使用分页插件,所以还需要一个MybatisPlusConfig来配置分页插件,并且每个SqlSessionFactory 都要配置分页插件,这样分页插件才会生效。

相关推荐
Java面试题总结32 分钟前
Spring @Validated失效?原因、排查与高效解决方案全解析
java·spring boot·spring
LucianaiB1 小时前
干货 | 手把手教你用 OpenClaw + Skill 实现微信公众号全自动创作发布
后端
eggwyw1 小时前
springboot和springframework版本依赖关系
java·spring boot·后端
韩立学长1 小时前
Springboot奶茶加盟信息管理系统m307m786(程序、源码、数据库、调试部署方案及开发环境)系统界面展示及获取方式置于文档末尾,可供参考。
数据库·spring boot·后端
开longlong了吗?2 小时前
Luan Takeaway——大模型驱动的智能外卖管理系统( Spring Cloud、Langchain4j )
后端·spring·spring cloud·langchain
品克缤2 小时前
Trading-Analysis:基于“规则+LLM”的行情分析终端(兼谈 Vibe Coding 实战感)
前端·后端·node.js·vue·express·ai编程·llama
开longlong了吗?3 小时前
Luan Takeaway System:基于Spring Boot + Spring Cloud的外卖业务系统
spring boot·后端·spring cloud
用户7344028193423 小时前
使用 Docker Compose 部署单机版 Redis:简单高效的数据缓存与存储
后端
yuhaiqiang3 小时前
谈谈什么是多AI交叉论证思维
前端·后端·面试
加洛斯3 小时前
JAVA知识梳理:一文搞懂集合中的List与ArrayList的基础与进阶
java·后端·面试