LambdaQueryWrapper多表分页查询
时间: 2023-10-12 14:12:41 浏览: 225
Spring Boot-MybatisPlus表格分页与下拉分页查询.docx
LambdaQueryWrapper 是 MyBatis-Plus 提供的一种查询构造器,可以方便地进行条件查询、排序、分页等操作。多表查询可以通过联表查询来实现,具体操作如下:
1. 首先需要在实体类中定义关联表的字段,例如:
```
public class User {
private Long id;
private String username;
private Long roleId;
// 省略其他字段
@TableField(exist = false)
private Role role;
}
```
这里的 roleId 是用户表中的一个外键,关联到角色表的主键 id。而 role 字段则是一个不存在于数据库中的字段,用于存储关联查询的结果。
2. 在查询时使用 LambdaQueryWrapper 进行条件构造,例如:
```
LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(User::getUsername, "admin")
.leftJoin(Role.class, User::getRoleId, Role::getId)
.orderByDesc(User::getId);
```
这里使用了 leftJoin 方法进行关联查询,第一个参数是关联的表名,第二个参数是当前表的关联字段,第三个参数是关联表的主键字段。orderByDesc 方法则是对结果进行降序排序。
3. 最后使用 MyBatis-Plus 提供的 Page 类进行分页查询,并且将查询结果设置到关联字段中,例如:
```
Page<User> page = new Page<>(1, 10);
IPage<Map<String, Object>> result = userMapper.selectMapsPage(page, wrapper);
List<Map<String, Object>> records = result.getRecords();
for (Map<String, Object> record : records) {
User user = BeanUtil.mapToBean(record, User.class, true);
Role role = BeanUtil.mapToBean(record, Role.class, true);
user.setRole(role);
}
page.setRecords(records);
return page;
```
这里使用了 selectMapsPage 方法进行分页查询,返回的结果是一个 Map 列表。然后使用 BeanUtil 工具类将 Map 转换为实体对象,最后将关联查询的结果设置到 user 对象的 role 字段中。最终返回的是一个分页结果对象。
阅读全文