mybatis-plus分页+多数据源

1.maven配置

		<!--mybatisPlus-->
		<dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.4.2</version>
        </dependency>
        <!--多数据源-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>dynamic-datasource-spring-boot-starter</artifactId>
            <version>3.4.1</version>
        </dependency>

2.两种方式实现多数据源

2.1一种是用mybatis-plus的多数据源工程我就不赘述太多。可以看看官方文档

https://www.kancloud.cn/tracy5546/dynamic-datasource/2264611

2.1.1 yml配置文件:

spring:
  # 多数据源
  datasource:
    dynamic:
      primary: mysql #设置默认的数据源或者数据源组,默认值即为master
      strict: false #严格匹配数据源,默认false. true未匹配到指定数据源时抛异常,false使用默认数据源
      datasource:
        mysql:
          url: jdbc:mysql://192.168.168.168:3306/weapon_test?serverTimezone=GMT&useUnicode=true&characterEncoding=utf-8&allowMultiQueries=true
          username: root
          password: sthg123
          driver-class-name: com.mysql.jdbc.Driver # 3.2.0开始支持SPI可省略此配置
        oracle: #配置oracle属性
          url: jdbc:mysql://xx.xx.xx.xx:3307/dynamic
          username: root
          password: 123456
          driver-class-name: com.mysql.jdbc.Driver

2.1.2 代码

主要是配置mapper扫描地址mybatis-plus分页+多数据源_第1张图片

业务层使用多数据源注解DS

import com.baomidou.dynamic.datasource.annotation.DS;
@Service
@DS("mysql") 
//可以在类上加也可以方法上,官方约定:方法上的注解优先于类上注解。
//默认不填则使用yml上的默认数据源
public class ServiceImpl implements Service {

@Override
@DS("oracle") //通过配置来选择不同的数据源
public void add(model param) {
 mapper.add(param);
}
}

分页插件配置 :自己新建一个配置类 这里推荐使用新版的注入方式,低版本的方式已经不推荐使用


/**
 * 配置分页插件
 *
 */
@Configuration
public class MybatisPlusConfig {

    /**
     * 新的分页插件,一缓和二缓遵循mybatis的规则,需要设置 MybatisConfiguration#useDeprecatedExecutor = false 避免缓存出现问题
     */
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        //如果是别的数据库自己选择枚举里面的
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
        return interceptor;
    }

}

分页插件的使用注意事项:引用的包要注意


import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;

@Override
public IPage<model> page(model param) {
 QueryWrapper<model> queryWrapper = new QueryWrapper<>(param);
 Page<model> pages = new Page<>(1,10);//

IPage<model> page = mapper.selectPage(pages, queryWrapper);

return page;
}

至此第一种分页加多数据源的方式结束

2.2 第二种方式不适用@DS

使用springboot手动配置多数据源 删除启动类的mapper注解

mybatis-plus分页+多数据源_第2张图片

新建配置类,这里以mysql为例 目录结构

mybatis-plus分页+多数据源_第3张图片

@Configuration
@MapperScan(basePackages = MysqlDataSourceConfig.PACKAGE, sqlSessionFactoryRef = "mysqlSqlSessionFactory")
public class MysqlDataSourceConfig {
    // 精确到 master 目录,以便跟其他数据源隔离
    static final String PACKAGE = "com.sthq.image.mapper.mysql";
    static final String MAPPER_LOCATION = "classpath:mapper/mysql/*.xml";
    static final String NULL = "configuration.setCallSettersOnNulls=true";

    @Value("${mysql.datasource.url}")
    private String url;

    @Value("${mysql.datasource.username}")
    private String user;

    @Value("${mysql.datasource.password}")
    private String password;

    @Value("${mysql.datasource.driver-class-name}")
    private String driverClass;

    @Bean(name = "mysqlDataSource")
    public DataSource mysqlDataSource() {
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setDriverClassName(driverClass);
        dataSource.setUrl(url);
        dataSource.setUsername(user);
        dataSource.setPassword(password);
        return dataSource;
    }

    @Bean(name = "mysqlTransactionManager")
    public DataSourceTransactionManager masterTransactionManager() {
        return new DataSourceTransactionManager(mysqlDataSource());
    }

    @Bean(name = "mysqlSqlSessionFactory")
    public SqlSessionFactory masterSqlSessionFactory(@Qualifier("mysqlDataSource") DataSource masterDataSource)
            throws Exception {
        MybatisSqlSessionFactoryBean sessionFactoryBean = new MybatisSqlSessionFactoryBean();
        sessionFactoryBean.setDataSource(masterDataSource);
        MybatisConfiguration configuration = new MybatisConfiguration();
        configuration.setCallSettersOnNulls(true);
        configuration.getLogImpl();
        // 驼峰命名
        configuration.setMapUnderscoreToCamelCase(true);
        sessionFactoryBean.setConfiguration(configuration);
        sessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver()
                .getResources(MysqlDataSourceConfig.MAPPER_LOCATION));
        //分页插件配置
        sessionFactoryBean.setPlugins(mybatisPlusInterceptor());
        return sessionFactoryBean.getObject();
    }

    /**
     * 新的分页插件,一缓和二缓遵循mybatis的规则,需要设置 MybatisConfiguration#useDeprecatedExecutor = false 避免缓存出现问题
     */
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
        return interceptor;
    }
}

这里需要手动把分页插件配置到sqlsession里 如果不注入则分页插件不生效

mybatis-plus分页+多数据源_第4张图片

其他使用和方式一样

注意事项: 不要引用mybatis的源包(高版本plus)不然会影响注入bean, 注意多个jar包版本对应,尤其是从mybatis转到plus,多余的包要注意冲突问题

你可能感兴趣的:(mybatis,mybatis,spring,boot)