详细介绍mybatisplus的分页查询
时间: 2023-07-03 08:05:23 浏览: 89
mybatis-plus分页查询的实现示例
MyBatis-Plus 是 MyBatis 的一个增强工具,提供了许多实用的功能,其中包括分页查询。下面我来详细介绍一下 MyBatis-Plus 的分页查询功能。
## 1. 分页查询
MyBatis-Plus 提供了一个名为 `Page` 的分页类,通过它可以轻松地完成分页查询。它的构造方法如下:
```java
// 参数一:当前页码,从 1 开始
// 参数二:每页显示的记录数
Page<T> page = new Page<>(current, size);
```
我们可以在 Mapper 接口中定义一个分页查询的方法,如下所示:
```java
List<T> selectPage(Page<T> page, @Param("ew") Wrapper<T> wrapper);
```
其中,`Wrapper` 是 MyBatis-Plus 提供的条件构造器,用于生成查询条件。
在 Mapper.xml 文件中,我们可以使用 `limit` 和 `offset` 关键字来实现分页查询,如下所示:
```xml
<select id="selectPage" resultType="T">
select *
from my_table
where 1=1
<if test="ew != null">
<if test="ew.sqlSegment != null">
and ${ew.sqlSegment}
</if>
</if>
limit #{page.offset}, #{page.size}
</select>
```
在上面的语句中,`${ew.sqlSegment}` 是 `Wrapper` 自动生成的查询条件,`#{page.offset}` 和 `#{page.size}` 分别对应 `Page` 类中的 `offset` 和 `size` 属性。
## 2. 分页查询示例
假设我们有一个 `User` 实体类,它的属性包括 `id`、`name` 和 `age`。我们要实现一个分页查询方法,查询年龄大于等于 18 岁的用户列表。具体实现如下:
```java
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;
@Override
public Page<User> selectPage(int current, int size) {
Page<User> page = new Page<>(current, size);
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.ge("age", 18);
userMapper.selectPage(page, wrapper);
return page;
}
}
```
在上面的代码中,我们使用 `QueryWrapper` 对象生成查询条件,并将 `Page` 对象和查询条件传递给 `userMapper.selectPage()` 方法。在 Mapper.xml 文件中,我们可以定义一个名为 `selectPage` 的查询语句,如下所示:
```xml
<select id="selectPage" resultType="User">
select *
from user
where 1=1
<if test="ew != null">
<if test="ew.sqlSegment != null">
and ${ew.sqlSegment}
</if>
</if>
limit #{page.offset}, #{page.size}
</select>
```
这样,我们就完成了一个简单的分页查询示例。
阅读全文