MyBatis 的 3 种分页方式

简介: MyBatis 的 3 种分页方式

MyBatis 是一个优秀的持久层框架,提供了丰富的数据库操作功能。在实际开发中,数据分页是一个常见需求。MyBatis 提供了多种方式来实现数据分页,本文将介绍其中的 3 种常用方式。

Limit 和 Offset 分页

在传统的 SQL 中,我们可以使用 LIMITOFFSET 关键字实现分页。这种方式能够方便地控制返回结果的数量和偏移量。

@Mapper
public interface UserMapper {
   
   
    List<User> getUsersByPage(int limit, int offset);
}

在上述代码中,我们定义了一个名为 getUsersByPage 的方法,该方法接收 limitoffset 两个参数。通过使用 LIMITOFFSET 关键字,我们可以在 SQL 查询中指定要返回的记录数及其偏移量。

RowBounds 分页

除了使用 LIMITOFFSET 进行分页之外,MyBatis 还提供了 RowBounds 类来实现分页。RowBounds 是 MyBatis 提供的一个用于控制查询结果集范围的对象。

@Mapper
public interface UserMapper {
   
   
    List<User> getUsersByPage(RowBounds rowBounds);
}

在上述代码中,我们将 RowBounds 对象作为参数传递给数据库查询方法。通过设置 offsetlimit 属性,我们可以控制返回结果的数量和偏移量。

int offset = 0;
int limit = 10;
RowBounds rowBounds = new RowBounds(offset, limit);
List<User> users = userMapper.getUsersByPage(rowBounds);

在实际调用时,我们可以创建一个 RowBounds 对象,并设置相应的 offsetlimit 值。然后将该对象传递给分页查询方法,即可实现数据分页。

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;
    }
}

在上述配置中,我们创建了一个名为 pageInterceptorPageInterceptor Bean,并设置了相关属性,如数据库方言等。

最后,在需要分页的查询方法上使用 @com.github.pagehelper.PageHelper 注解即可实现分页功能:

@Mapper
public interface UserMapper {
   
   
    @PageHelper(startPage = 1, pageSize = 10)
    List<User> getUsersByPage();
}

在上述代码中,@PageHelper 注解用于标记要进行分页的方法。通过设置 startPagepageSize 属性,我们可以指定当前页数和每页记录数。

总结:

本文介绍了 MyBatis 中的 3 种常用分页方式:Limit 和 Offset 分页、RowBounds 分页以及 PageHelper 插件。每种方式都有各自的优劣和适用场景,开发人员可以根据具体需求选择合适的分页方式。

目录
相关文章
|
8月前
|
SQL Java 数据库连接
MyBatis分页
MyBatis作为Java持久层框架,需结合数据库特性或插件实现分页。分页分为物理分页(如MySQL的LIMIT)和逻辑分页(内存截取),推荐使用PageHelper插件自动注入分页语句,提升开发效率与性能。需注意索引优化、深分页问题及多表关联时的兼容性,结合业务场景选择合适方案。
304 4
|
SQL Java 数据库连接
微服务——MyBatis分页
本文介绍了分页的多种实现方式,包括自带RowBounds分页、第三方插件PageHelper分页、SQL分页、数组分页及拦截器分页。其中,RowBounds是先查询全部结果再内存分页;PageHelper通过修改SQL动态添加分页关键字;SQL分页依赖数据库自身的分页功能如`LIMIT`;数组分页则是查询全量数据后用`subList`方法截取;拦截器分页则统一在SQL后添加分页语句。最后总结逻辑分页适合小数据量,但大数据量易内存溢出;物理分页虽小数据量效率较低,但更适合大数据场景,优先推荐使用。
190 0
|
SQL Oracle 关系型数据库
【YashanDB知识库】Mybatis-Plus调用YashanDB怎么设置分页
【YashanDB知识库】Mybatis-Plus调用YashanDB怎么设置分页
|
SQL XML Java
8、Mybatis-Plus 分页插件、自定义分页
这篇文章介绍了Mybatis-Plus的分页功能,包括如何配置分页插件、使用Mybatis-Plus提供的Page对象进行分页查询,以及如何在XML中自定义分页SQL。文章通过具体的代码示例和测试结果,展示了分页插件的使用和自定义分页的方法。
8、Mybatis-Plus 分页插件、自定义分页
|
SQL Java 数据安全/隐私保护
发现问题:Mybatis-plus的分页总数为0,分页功能失效,以及多租户插件的使用。
总的来说,使用 Mybatis-plus 确实可以极大地方便我们的开发,但也需要我们理解其工作原理,掌握如何合适地使用各种插件。分页插件和多租户插件是其中典型,它们的运用可以让我们的代码更为简洁、高效,理解和掌握好它们的用法对我们的开发过程有着极其重要的意义。
1054 15
|
XML SQL Java
十二、MyBatis分页插件
十二、MyBatis分页插件
431 17
|
监控 安全 数据库
【YashanDB 知识库】Mybatis-Plus 调用 YashanDB 怎么设置分页
数据库状态分为正常与异常两种情况。当出现异常时,首先查看告警列表确认问题(如实例无法连接),并尝试用数据库用户名和密码登录。若能登录,说明主实例故障已切换至备库;若无法登录或为单节点,则需进一步排查。接着检查监控项,若有数据表明主实例故障,无数据则可能是通信中断。随后检查主机上的服务是否存在,若存在但通信受限,需排查安全设置或网络;若服务不存在,可能因重启或断电导致,需手动启动相关服务。最终在YashanDB列表中确认状态恢复。
|
SQL Java 关系型数据库
MyBatis篇-分页
本文介绍了多种分页方式,包括自带rowbound内存分页、第三方插件pagehelper(通过修改SQL实现分页)、SQL分页(依赖limit或rownum等关键字)、数组分页(先查询全部数据再用subList分页)、拦截器分页(自定义拦截器为SQL添加分页语句)。最后总结了逻辑分页(内存分页,适合小数据量)和物理分页(直接在数据库层面分页,适合大数据量)的优缺点,强调物理分页优先于逻辑分页。
|
SQL Java 数据库连接
【MyBatisPlus·最新教程】包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段
MyBatis-Plus是一个MyBatis的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。本文讲解了最新版MP的使用教程,包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段等核心功能。
2481 6
【MyBatisPlus·最新教程】包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段
|
SQL Java 数据库连接
MyBatis 实现分页的机制
MyBatis 的分页机制主要依赖于 `RowBounds` 对象和分页插件。`RowBounds` 实现内存分页,适合小数据量场景,通过设定偏移量和限制条数对结果集进行筛选。而针对大数据量,则推荐使用分页插件(如 PageHelper),实现物理分页。插件通过拦截 SQL 执行,动态修改语句添加分页逻辑,支持多种数据库方言。配置插件后,无需手动调整查询方法即可完成分页操作,提升性能与灵活性。
342 0