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

相关推荐
GetcharZp2 小时前
抛弃低效SSH!这套Ansible+Web可视化神器,让你天天准点下班!
后端
weixin_446260855 小时前
HACO:面向动态部署环境的对冲式智能计算可靠多智能体调度框架
后端·python·flask
ttwuai7 小时前
Cursor 生成 CRUD 后,Go 后台接口别只测 200:JWT、RBAC 和 tenant_id 怎么验
开发语言·后端·golang
用户8356290780517 小时前
Python 实现 Excel 页面布局与打印设置自动化
后端·python
用户9931441579847 小时前
微服务框架中获取用户信息
后端
xuanWb7 小时前
手写一个 LLM API 网关:Anthropic 与 OpenAI 协议转换的完整实现
后端
苍何7 小时前
给 Codex 换皮肤这门生意,被我开源了
后端
用户8356290780517 小时前
Python 实现 Excel 命名范围(Named Range)的创建与管理
后端·python
程序员David7 小时前
我让 Claude 从架构文档一路干到代码,踩了三个坑才摸清边界
后端