MyBatis 是一个优秀的持久层框架,提供了丰富的数据库操作功能。在实际开发中,数据分页是一个常见需求。MyBatis 提供了多种方式来实现数据分页,本文将介绍其中的 3 种常用方式。
Limit 和 Offset 分页
在传统的 SQL 中,我们可以使用 LIMIT
和 OFFSET
关键字实现分页。这种方式能够方便地控制返回结果的数量和偏移量。
@Mapper
public interface UserMapper {
List<User> getUsersByPage(int limit, int offset);
}
在上述代码中,我们定义了一个名为 getUsersByPage
的方法,该方法接收 limit
和 offset
两个参数。通过使用 LIMIT
和 OFFSET
关键字,我们可以在 SQL 查询中指定要返回的记录数及其偏移量。
RowBounds 分页
除了使用 LIMIT
和 OFFSET
进行分页之外,MyBatis 还提供了 RowBounds
类来实现分页。RowBounds
是 MyBatis 提供的一个用于控制查询结果集范围的对象。
@Mapper
public interface UserMapper {
List<User> getUsersByPage(RowBounds rowBounds);
}
在上述代码中,我们将 RowBounds
对象作为参数传递给数据库查询方法。通过设置 offset
和 limit
属性,我们可以控制返回结果的数量和偏移量。
int offset = 0;
int limit = 10;
RowBounds rowBounds = new RowBounds(offset, limit);
List<User> users = userMapper.getUsersByPage(rowBounds);
在实际调用时,我们可以创建一个 RowBounds
对象,并设置相应的 offset
和 limit
值。然后将该对象传递给分页查询方法,即可实现数据分页。
PageHelper 插件
除了上述两种方式之外,还有一个非常强大的分页插件可供使用,那就是 MyBatis 的 PageHelper。PageHelper 是一个开源的 MyBatis 分页插件,提供了丰富的分页功能和易于使用的 API。
首先,我们需要引入 PageHelper 的依赖:
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.2.1</version>
</dependency>
然后,在 Spring Boot 配置类中配置 PageHelper:
@Configuration
public class MyBatisConfig {
@Bean
public PageInterceptor pageInterceptor() {
PageInterceptor pageInterceptor = new PageInterceptor();
Properties properties = new Properties();
properties.setProperty("helperDialect", "mysql");
pageInterceptor.setProperties(properties);
return pageInterceptor;
}
@Bean
public SqlSessionFactoryBean sqlSessionFactory(DataSource dataSource, PageInterceptor pageInterceptor) throws IOException {
SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
sessionFactory.setDataSource(dataSource);
// 添加 PageInterceptor 插件
Interceptor[] plugins = new Interceptor[] {
pageInterceptor};
sessionFactory.setPlugins(plugins);
return sessionFactory;
}
}
在上述配置中,我们创建了一个名为 pageInterceptor
的 PageInterceptor
Bean,并设置了相关属性,如数据库方言等。
最后,在需要分页的查询方法上使用 @com.github.pagehelper.PageHelper
注解即可实现分页功能:
@Mapper
public interface UserMapper {
@PageHelper(startPage = 1, pageSize = 10)
List<User> getUsersByPage();
}
在上述代码中,@PageHelper
注解用于标记要进行分页的方法。通过设置 startPage
和 pageSize
属性,我们可以指定当前页数和每页记录数。
总结:
本文介绍了 MyBatis 中的 3 种常用分页方式:Limit 和 Offset 分页、RowBounds 分页以及 PageHelper 插件。每种方式都有各自的优劣和适用场景,开发人员可以根据具体需求选择合适的分页方式。