LambdaQueryWrapper 去重分页查询
时间: 2023-11-07 14:06:29 浏览: 145
LambdaQueryWrapper 是 MyBatis-Plus 提供的查询构建器,它支持链式调用,可以方便地构建复杂的查询条件。在使用 LambdaQueryWrapper 进行去重分页查询时,可以通过使用 selectDistinct 方法实现去重,再配合 page 方法实现分页。
下面是一个示例代码:
```java
LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<User>()
.selectDistinct(User::getName) // 去重字段
.eq(User::getAge, 18) // 其他查询条件
.orderByDesc(User::getId); // 排序条件
Page<User> page = new Page<>(1, 10); // 第一页,每页10条记录
IPage<User> userPage = userService.page(page, queryWrapper);
List<User> userList = userPage.getRecords();
```
以上代码中,我们通过 selectDistinct 方法指定了需要去重的字段(这里是用户的姓名),然后传入其他的查询条件(这里是年龄等于18),最后通过 orderByDesc 方法指定了排序条件(这里是按照用户ID倒序排列)。最后调用 page 方法实现分页,并返回一个 IPage 对象。
相关问题
LambdaQueryWrapper的分页查询
LambdaQueryWrapper 是 MyBatis Plus 提供的一个实用工具类,可以帮助我们更方便地构建 SQL 查询语句。在使用 LambdaQueryWrapper 进行分页查询时,可以使用 MyBatis Plus 提供的 Page 类来实现分页功能。
具体的实现步骤如下:
1. 创建一个 Page 对象,用于存储分页相关的信息,例如当前页码、每页显示条数等。
```
Page<User> page = new Page<>(currentPage, pageSize);
```
2. 构建 QueryWrapper 对象,并设置分页查询的条件。
```
LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<User>()
.eq(User::getGender, gender)
.like(User::getName, name);
```
3. 调用 MyBatis Plus 提供的 selectPage 方法进行分页查询,并将查询结果存储在 Page 对象中。
```
userMapper.selectPage(page, queryWrapper);
```
4. 最后,从 Page 对象中取出查询结果并返回。
```
List<User> userList = page.getRecords();
return userList;
```
需要注意的是,以上代码中的 User 类是我们自己定义的实体类,而 userMapper 则是我们定义的 Mapper 接口。在使用 MyBatis Plus 进行分页查询时,需要确保数据库连接配置正确,并且 Mapper 接口已经正确定义。
LambdaQueryWrapper的分页查询继承的是MPJBaseServiceImpl
MPJBaseServiceImpl 是一个基于 MyBatis Plus 的 CRUD 通用接口的实现类。在 MPJBaseServiceImpl 中,已经封装了一些常用的 CRUD 操作,包括分页查询,因此在使用 LambdaQueryWrapper 进行分页查询时,可以直接继承 MPJBaseServiceImpl。
具体的实现步骤如下:
1. 在定义 Service 接口时,继承 MPJBaseService 接口,并指定泛型类型。
```
public interface UserService extends MPJBaseService<User> {
List<User> getUserListByPage(int currentPage, int pageSize, int gender, String name);
}
```
2. 在实现 Service 接口时,继承 MPJBaseServiceImpl 类,并指定泛型类型。
```
@Service
public class UserServiceImpl extends MPJBaseServiceImpl<UserMapper, User> implements UserService {
@Override
public List<User> getUserListByPage(int currentPage, int pageSize, int gender, String name) {
Page<User> page = new Page<>(currentPage, pageSize);
LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<User>()
.eq(User::getGender, gender)
.like(User::getName, name);
baseMapper.selectPage(page, queryWrapper);
return page.getRecords();
}
}
```
需要注意的是,在继承 MPJBaseServiceImpl 时,需要指定两个泛型类型,第一个泛型类型是 Mapper 接口的类型,第二个泛型类型是实体类的类型。在实现 getUserListByPage 方法时,可以直接调用 baseMapper 对象来进行数据库操作。
阅读全文