mybatisplus多数据源分页查询
时间: 2025-01-07 07:47:30 浏览: 5
### 使用 MyBatisPlus 实现多数据源分页查询
#### 配置多数据源支持
为了使 MyBatisPlus 支持多个数据源并能正常执行分页操作,需先完成多数据源的基础配置。这通常涉及定义不同的 `DataSource` Bean 并通过自定义逻辑决定哪个请求应该访问哪一个数据库实例[^2]。
```java
@Configuration
public class DataSourceConfig {
@Bean(name = "primaryDataSource")
@ConfigurationProperties(prefix="spring.datasource.primary")
public DataSource primaryDataSource() {
return DataSourceBuilder.create().build();
}
@Bean(name = "secondaryDataSource")
@ConfigurationProperties(prefix="spring.datasource.secondary")
public DataSource secondaryDataSource() {
return DataSourceBuilder.create().build();
}
}
```
#### 动态数据源路由
接着要创建动态数据源路由器来管理不同场景下使用的具体的数据源:
```java
import org.springframework.jdbc.datasource.lookup.AbstractRoutingDataSource;
public class DynamicDataSource extends AbstractRoutingDataSource {
private static final ThreadLocal<String> contextHolder = new ThreadLocal<>();
public static void setDataSourceKey(String key){
contextHolder.set(key);
}
protected Object determineCurrentLookupKey(){
return contextHolder.get();
}
}
```
此部分代码允许应用程序在运行期间更改当前活动的数据源键值,从而达到切换目的。
#### 启用全局分页拦截器
对于每一个想要启用分页功能的数据源来说,在其对应的 SQL Session 中注册分页插件是非常重要的一步。注意当面对不同类型数据库(比如 MySQL 和 Oracle),应当让框架能够识别所连接的具体DB种类以便正确构建SQL语句[^3]。
```java
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
// 不指定DbType,自动适配数据库类型
interceptor.addInnerInterceptor(new PaginationInnerInterceptor());
return interceptor;
}
```
上述设置可以确保无论目标数据库是什么样的产品,都能得到兼容良好的分页效果。
#### 编写服务层业务逻辑
最后编写具体的业务处理类和服务接口,这里假设有一个名为 `UserMapper` 的 Mapper 接口用于映射用户表的操作,并且已经实现了基本CRUD方法以及必要的条件过滤和排序等功能。那么可以在相应的 Service 类里调用这些 API 来获取带有限制范围的结果集。
```java
@Service
public class UserServiceImpl implements IUserService {
@Autowired
private UserMapper userMapper;
@Override
public IPage<User> getUsersByPage(Integer currentPage, Integer pageSize) {
Page<User> page = new Page<>(currentPage, pageSize);
LambdaQueryWrapper<User> queryWrapper = Wrappers.<User>lambdaQuery()
.orderByAsc(User::getId);
return userMapper.selectPage(page, queryWrapper);
}
}
```
以上就是利用 MyBatisPlus 构建一个多数据源环境下的分页查询系统的概览介绍[^1]。
阅读全文