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。

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

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;
    }
}

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

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

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

相关推荐
大鸡腿同学5 小时前
手心向上,手心向下
后端
CCblandy6 小时前
令牌桶在 0.9 倍负载超发 19%、固定窗口边界放行 20 个:四种限流算法同构实测
后端·python·算法·性能优化·架构
IT研究室6 小时前
最新计算机毕业设计选题推荐-基于spring boot的葡萄酒文化宣传网站-网站-文档指导-Java-springboot
java·spring boot·课程设计
凤山老林7 小时前
Spring Boot 集成 Sa-Token 实现高可用权限认证:登录鉴权、动态路由权限与接口防重放实战
spring boot·后端·sa-token·bootstrap
Bazingga9 小时前
一次推理的完整旅程:ReAct推理深度解析
后端
姜鱼问生9 小时前
Nginx gzip 压缩:一个配置让页面加载快 3 倍
后端·算法·架构
颜酱9 小时前
一栋商业大厦,讲清 InnoDB 的表空间、段、区和页
后端·mysql
码事漫谈9 小时前
1956 亿行数据该怎么存:金仓时序数据库的三个实测
后端
Wx-bishekaifayuan9 小时前
springboot桂味美食分享系统40540-计算机课程设计、毕业设计
spring boot·后端·python·django·课程设计·express·旅游
彭亚川Allen9 小时前
从零手搓 RAG 之检索全流程,给大模型接上自己的知识库
前端·后端·ai编程