mybatisplus分页查询数据权限
时间: 2025-01-12 11:45:13 浏览: 63
### MyBatis Plus 中带有数据权限的分页查询实现
在MyBatis Plus中,分页查询通过集成内置的分页插件来简化操作。为了实现带数据权限控制的分页查询,在原有基础上加入逻辑处理以确保只有授权的数据可见。
#### 配置分页插件
首先需配置分页拦截器`PaginationInterceptor`以便支持分页功能:
```java
@Configuration
public class MybatisPlusConfig {
@Bean
public PaginationInterceptor paginationInterceptor() {
return new PaginationInterceptor();
}
}
```
此配置允许应用程序利用MyBatis Plus提供的便捷分页特性[^1]。
#### 创建自定义SQL注入器
对于涉及复杂业务场景下的数据权限过滤,则可通过继承`AbstractSqlInjector`来自定义SQL构建过程中的额外校验逻辑。这一步骤并非直接关联到分页本身,而是为后续实施细粒度访问控制做准备。
#### 添加全局租户或部门级联筛选
如果存在多租户或多部门架构需求,可以在每次执行数据库交互前动态附加WHERE子句用于限定特定范围内的资源访问。例如基于当前登录用户的所属单位自动追加分部ID字段匹配条件:
```sql
AND dept_id IN (SELECT id FROM sys_dept WHERE path LIKE concat('%', #{currentDeptPath}, '%'))
```
上述做法能够有效缩小结果集规模从而间接提升性能表现的同时也满足了安全合规的要求。
#### 编写Service层接口及其实现类
针对具体业务对象编写服务接口及其对应的实现方式,这里假设有一个名为User的服务用来获取用户列表信息并应用分页与权限验证机制:
```java
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IUserService {
@Override
public IPage<UserVO> selectPageVo(Page pageCondition) {
LambdaQueryWrapper<User> queryWrapper = Wrappers.<User>lambdaQuery()
.eq(User::getIsDeleted, false); // 基础查询条件
// 动态拼接更多个性化约束项...
Page<User> resultPage = this.page(pageCondition, queryWrapper);
List<UserVO> voList = BeanUtil.copyToList(resultPage.getRecords(), UserVO.class);
return new Page<>(resultPage.getCurrent(), resultPage.getSize(), resultPage.getTotal()).setRecords(voList);
}
}
```
这段代码展示了如何组合使用Lambda表达式构造灵活可变的查询语句以及完成最终的结果映射转换工作流程。
#### Controller 层调用示例
最后是在控制器层面接收前端传入参数并转发给相应的service进行实际运算处理:
```java
@RestController
@RequestMapping("/users")
public class UserController {
private final IUserService userService;
public UserController(IUserService userService){
this.userService = userService;
}
@GetMapping("/page")
public Result<IPage<UserVO>> getUserPages(@RequestParam Integer pageNum,
@RequestParam Integer pageSize) {
Page pageParam = new Page<>(pageNum, pageSize);
IPage<UserVO> userPage = userService.selectPageVo(pageParam);
return Result.success(userPage);
}
}
```
以上即完成了整个从请求解析到最后响应输出全过程的设计思路概述。
阅读全文
相关推荐


















