MyBatis 实现分页查询主要有两种方式:
- 使用 MyBatis 提供的 RowBounds 对象进行物理分页。
- 使用插件如 PageHelper 进行逻辑分页。
方法一:使用 RowBounds 对象
RowBounds 是 MyBatis 提供的一个用于分页的对象,它通过在 SQL 映射文件中指定 offset 和 limit 来实现分页。
示例代码:
public List<User> selectUsersByPage(int page, int pageSize) {
SqlSession session = sqlSessionFactory.openSession();
try {
UserMapper mapper = session.getMapper(UserMapper.class);
RowBounds rowBounds = new RowBounds((page - 1) * pageSize, pageSize);
return mapper.selectAllUsers(rowBounds);
} finally {
session.close();
}
}
在 UserMapper.xml 中定义 SQL:
<select id="selectAllUsers" resultType="User">
SELECT * FROM users
</select>
方法二:使用 PageHelper 插件
PageHelper 是一个开源的 MyBatis 分页插件,它通过拦截器的方式实现了物理分页,使用起来更加简单方便。
首先添加 PageHelper 依赖到项目中:
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>最新版本号</version>
</dependency>
然后在 MyBatis 配置文件中配置 PageHelper:
<plugins>
<plugin interceptor="com.github.pagehelper.PageInterceptor">
<property name="helperDialect" value="mysql"/>
<!-- 其他属性 -->
</plugin>
</plugins>
使用 PageHelper 进行分页查询:
public List<User> selectUsersByPage(int pageNum, int pageSize) {
PageHelper.startPage(pageNum, pageSize);
return userMapper.selectAllUsers();
}
在 UserMapper.xml 中定义 SQL:
<select id="selectAllUsers" resultType="User">
SELECT * FROM users
</select>
以上两种方法都可以实现 MyBatis 的分页查询,选择哪种方式取决于个人或项目的需求。