LambdaQueryWrapper 多表条件查询
时间: 2023-03-27 12:05:10 浏览: 568
LambdaQueryWrapper 是 MyBatis-Plus 框架中的一个查询条件构造器,可以用于多表条件查询。通过 LambdaQueryWrapper 可以方便地构建多表关联查询的条件,例如联表查询、子查询等。同时,LambdaQueryWrapper 还支持链式调用,可以更加灵活地构建查询条件。
相关问题
LambdaQueryWrapper多表分页查询
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 字段中。最终返回的是一个分页结果对象。
LambdaQueryWrapper 多表查询内连接条件查询
LambdaQueryWrapper 是 MyBatis-Plus 中的一个查询条件构造器,可以用于构造复杂的查询条件。多表查询内连接条件查询可以通过 LambdaQueryWrapper 的 join 方法来实现。
假设有两个表 A 和 B,需要查询它们的内连接结果,并且需要满足 A 表的某个字段等于某个值,B 表的某个字段也等于某个值,可以按照下面的方式构造查询条件:
```
LambdaQueryWrapper wrapper = new LambdaQueryWrapper();
wrapper.eq(A::getField, value)
.eq(B::getField, value)
.last("INNER JOIN B ON A.id = B.a_id");
```
其中,eq 方法用于添加等于条件,getField 是指实体类中对应字段的 getter 方法,value 是需要查询的值。last 方法用于添加 SQL 的末尾部分,用于添加 JOIN 条件。
这样就可以通过 LambdaQueryWrapper 实现多表查询内连接条件查询了。
阅读全文