集成 MyBatis-Plus
基础介绍
- MybatisPlus Github https://github.com/baomidou/mybatis-plus
- MybatisPlus 文档 https://mybatis.plus/
只要引入了 mybatis-plus 相关 jar 包即自动集成,无需额外配置。请使用 mybatis-plus
3.x(对应 Spring Boot 3/4 请选择配套的 mybatis-plus 版本)。
集成步骤
1. 项目引入 mybatis-Plus 依赖。
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>${version}</version>
</dependency>
2. 使用DS注解进行切换数据源。
@Service
@DS("mysql")
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
@DS("oracle")
public void addUser(User user) {
//do something
baseMapper.insert(user);
}
}
3.分页配置。
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
//如果是不同类型的库,请不要指定DbType,其会自动判断。
interceptor.addInnerInterceptor(new PaginationInnerInterceptor());
// interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
return interceptor;
}
4.注意事项。
mp 内置的 ServiceImpl 在新增,更改,删除等一些方法上自带事物导致不能切换数据源。
解决办法:
- 复制 ServiceImpl 出来为自己的 MyServiceImpl,并去掉所有事务注解。
- 创建一个新方法,并在此方法上加 DS 注解. 如上面的
addUser方法。
FAQ
为什么要单独拿出来说和 mybatisPlus 的集成?
因为 mybatisPlus 重写了一些核心类,必须通过解析获得真实的代理对象。
如果自己写多数据源,则很难完成与 mp 的集成。
核心解析源码:DataSourceClassResolver
https://github.com/baomidou/dynamic-datasource/blob/master/dynamic-datasource-spring/src/main/java/com/baomidou/dynamic/datasource/support/DataSourceClassResolver.java