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 都要配置分页插件,这样分页插件才会生效。

相关推荐
lizhongxuan2 小时前
AI 从工具调用到自主进化:SkillSMP 与 EvoMap
后端
暴力袋鼠哥2 小时前
基于 Spring Boot 3 + Vue 3 的农产品在线销售平台设计与实现
vue.js·spring boot·后端
canonical_entropy2 小时前
DDD 概念澄清:那些教程不会告诉你的事
后端·低代码·领域驱动设计
海边的Kurisu2 小时前
Mybatis-Plus | 只做增强不做改变——为简化开发而生
java·开发语言·mybatis
凌云拓界3 小时前
TypeWell全攻略(二):热力图渲染引擎,让键盘发光
前端·后端·python·计算机外设·交互·pyqt·数据可视化
李广坤4 小时前
Spring Boot Validation 使用手册
后端
柒.梧.4 小时前
吃透Spring Bean:生命周期、单例特性、作用域及扩展方式
java·后端·spring
zihan03214 小时前
若依(RuoYi)框架核心升级:全面适配 SpringData JPA,替换 MyBatis 持久层方案
java·开发语言·前端框架·mybatis·若依升级springboot
嘻哈baby4 小时前
接口幂等性设计与实战:支付、下单、重试场景怎么搞?
后端