mybatis分页怎么实现的
时间: 2024-03-03 16:42:25 浏览: 77
MyBatis提供了两种方式实现分页:
1. 基于物理分页
- 使用`RowBounds`进行分页
`RowBounds`是Mybatis提供的一个用于物理分页的类,可以通过它进行查询结果的分页操作。
```java
int offset = (pageNum - 1) * pageSize;
RowBounds rowBounds = new RowBounds(offset, pageSize);
List<User> userList = sqlSession.selectList("com.example.mapper.UserMapper.selectUsers", null, rowBounds);
```
其中,`offset`表示偏移量,即从第几条记录开始查询;`pageSize`表示每页显示的记录数;`UserMapper.selectUsers`是查询用户列表的Mapper方法。
- 使用`limit`和`offset`进行分页
在SQL语句中使用`limit`和`offset`语句进行分页。
```xml
<select id="selectUsers" resultMap="userMap">
select id, name, age, gender
from user
limit #{pageSize} offset #{offset}
</select>
```
其中,`#{pageSize}`表示每页显示的记录数,`#{offset}`表示偏移量。
2. 基于逻辑分页
基于逻辑分页的实现方式是在SQL语句中使用`rownum`或`row_number()`函数来实现,但这种方式需要数据库支持分页查询。
```xml
<select id="selectUsers" resultMap="userMap">
select *
from (
select rownum rn, t.*
from (
select id, name, age, gender
from user
order by id
) t
where rownum <= #{end}
) t2
where t2.rn >= #{start}
</select>
```
其中,`#{start}`和`#{end}`表示分页的起始位置和结束位置。但需要注意的是,使用`rownum`进行分页的SQL语句在MySQL等其他数据库中无法使用,因为MySQL不支持`rownum`语法。
阅读全文