LambdaQueryWrapper如果写子查询
时间: 2023-12-13 12:34:23 浏览: 64
LambdaQueryWrapper可以使用nested方法来实现子查询。nested方法可以接受一个LambdaQueryWrapper对象作为参数,该对象表示嵌套的查询条件。下面是一个使用LambdaQueryWrapper实现子查询的例子:
```java
LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
wrapper.nested(i -> i.eq(User::getAge, 20).or().eq(User::getName, "张三"));
List<User> userList = userMapper.selectList(wrapper);
```
上面的代码中,我们创建了一个LambdaQueryWrapper对象wrapper,并使用nested方法传入一个LambdaQueryWrapper对象i,该对象表示嵌套的查询条件。在LambdaQueryWrapper对象i中,我们使用eq方法实现了一个查询条件,查询年龄等于20或者姓名等于"张三"的用户。最后,我们使用wrapper对象调用selectList方法执行查询,并将结果保存在userList中。
相关问题
如何在LambdaQueryWrapper中写子查询?
在LambdaQueryWrapper中使用子查询可以通过以下步骤实现:
1. 首先,创建一个LambdaQueryWrapper对象,用于构建查询条件。
2. 使用LambdaQueryWrapper的inSql方法来添加子查询条件。inSql方法接受两个参数:子查询字段和子查询语句。
3. 在子查询语句中,可以使用LambdaQueryWrapper的select方法来指定需要查询的字段,使用from方法来指定查询的表,使用where方法来添加查询条件。
4. 最后,使用LambdaQueryWrapper的list方法来执行查询,并获取结果。
下面是一个示例代码,演示了如何在LambdaQueryWrapper中写子查询:
```java
LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
wrapper.inSql(User::getId, "select id from user where age > 18");
List<User> userList = userService.list(wrapper);
```
在上面的示例中,我们创建了一个LambdaQueryWrapper对象,并使用inSql方法添加了一个子查询条件。子查询语句中使用了select、from和where方法来构建查询条件。最后,我们使用list方法执行查询,并获取结果。
LambdaQueryWrapper not in 子查询
如果要使用 LambdaQueryWrapper 进行 not in 子查询,可以先使用 LambdaQueryWrapper 查询出子查询的结果集,然后再使用 notIn 方法。例如:
```java
LambdaQueryWrapper<User> subWrapper = new LambdaQueryWrapper<>();
subWrapper.select(User::getId).eq(User::getDeptId, 1);
List<Integer> subList = userMapper.selectObjs(subWrapper);
LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
wrapper.notIn(User::getId, subList);
List<User> userList = userMapper.selectList(wrapper);
```
上述代码中,先使用 LambdaQueryWrapper 查询出 User 表中 deptId 为 1 的记录的 id 列表,然后再使用 notIn 方法查询不在这个列表中的记录。这样就可以使用 LambdaQueryWrapper 进行 not in 子查询了。