如何使用 mybatis 实现分页

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用 mybatis 实现分页相关的知识,希望对你有一定的参考价值。

参考技术A 1、亲Mybatis是自己写Sql语句啊,和Hibernate不一样。
2、如何知道上面的,你还要知道mysql有一个分页语句叫limit,如:limit(1,10);前面一个参数是起始未知,后面一个是查询多少个。
3、Oracle的分页方法是嵌套子查询,需要用到rownum这个属性
Sql Server是Top。

分页例子:
Oracle select * from (select emp.*,rownum rn from emp where rownum<9) where rn>3;
MySql select * from emp limit startIndex,maxNum本回答被提问者采纳

Mybatis分页对比MybatisPlus分页

参考技术A Mybatis使用内存分页

Mybatis使用RowBounds对象进行分页,它是针对ResultSet结果集执行的内存分页,而非物理分页。可以在sql内直接书写带有物理分页的参数来完成物理分页功能,也可以使用分页插件来完成物理分页。

       分页插件的基本原理是使用Mybatis提供的插件接口,实现自定义插件,在插件的拦截方法内拦截待执行的sql,然后重写sql,根据dialect方言,添加对应的物理分页语句和物理分页参数。

————————————————

MybatisPlus是物理分页

基本步骤是:

1 原生SQL解析

2 判断有无page分页对象。没有对象就直接进行SQL操作,有对象就继续分页解析

3 count语句优化。根据SQL条件进行count优化,这点不同于传统的 select count(1) from (你的 业务 SQL) 做下简单的封装,详细源码可以自己看,或者打印出执行的SQL可以清楚的看到

4 通过count数量和之前前端传递来的分页pageNum和pageSize对SQL进行拼接

5最终执行拼接完整的SQL实现分页处理

总结:mybatis的是内存分页,全查出来丢在内存中,这样子很不好! 现在大面积使用的插件MybatisPlus是物理分页,先查询总数(不像网上很多人说的只是简单外包一层计算count),再根据分页参数瓶装SQL然后执行分页查询

以上是关于如何使用 mybatis 实现分页的主要内容,如果未能解决你的问题,请参考以下文章

Mybatis是如何进行分页的?

如何优雅地实现分页查询

Mybatis分页对比MybatisPlus分页

Mybatis分页如何实现?四种常用分页方式你Get到没!

MyBatis 分页插件 PageHelper:是如何拦截SQL进行分页

Mybatis分页插件PageHelper使用