MyBatis分页

简介: 本文介绍多种分页实现方式:MyBatis自带RowBounds内存分页、PageHelper插件自动分页、SQL limit物理分页、数组subList分页及拦截器分页。对比逻辑分页与物理分页的优劣,指出大数据量下应优先使用物理分页,避免内存溢出,提升系统性能。

分页

1 自带rowbound分页先将所有的结果集查询出来ResultSet,再进行内存分页(limit)2 第三方插件pagehelper会将一个查询SQL变成两部分执行,假设SQL是:select name from user;①自动识别数据库类型,添加对应的分页关键字,如MySQL则limit,Oracle则rownum,DB2则fetch,查找出上面SQL的结果②查找出上面结果,查询结果的总条数count3 SQL分页依赖limit进行实现,或者rownum等自身的SQL实现4 数组分页简而言之:查全部再subList首先在dao层,创建StudentMapper接口,用于对数据库的操作。在接口中定义通过数组分页的查询方法,如下所示:

Java

运行代码复制代码

1

List<Student> queryStudentsByArray();

方法很简单,就是获取所有的数据,通过list接收后进行分页操作。创建StudentMapper.xml文件,编写查询的sql语句:

XML

复制代码

1

<select id="queryStudentsByArray"  resultMap="studentmapper"> select * from student </select>

可以看出再编写sql语句的时候,我们并没有作任何分页的相关操作。这里是查询到所有的学生信息。接下来在service层获取数据并且进行分页实现:定义IStuService接口,并且定义分页方法:

Java

运行代码复制代码

1

List<Student> queryStudentsByArray(int currPage, int pageSize);

通过接收currPage参数表示显示第几页的数据,pageSize表示每页显示的数据条数。创建IStuService接口实现类StuServiceIml对方法实现,对获取到的数组通过currPage和pageSize进行分页:

Java

运行代码复制代码

1

2

3

4

5

6

7

8

@Override

public List<Student> queryStudentsByArray(int currPage, int pageSize) {

List<Student> students = studentMapper.queryStudentsByArray();

//  从第几条数据开始        

int firstIndex = (currPage - 1) * pageSize;

//  到第几条数据结束        

int lastIndex = currPage * pageSize; return students.subList(firstIndex, lastIndex);

}

通过subList方法,获取到两个索引间的所有数据。最后在controller中创建测试方法:

Java

运行代码复制代码

1

2

3

4

5

6

@ResponseBody    

@RequestMapping("/student/array/{currPage}/{pageSize}")

public List<Student> getStudentByArray(@PathVariable("currPage") int currPage, @PathVariable("pageSize") int pageSize) {

List<Student> student = StuServiceIml.queryStudentsByArray(currPage, pageSize);

return student;

}

通过用户传入的currPage和pageSize获取指定数据。5 拦截器分页自定义拦截器实现了拦截所有以ByPage【或自己约束的都是可以的】结尾的查询语句,并且利用获取到的分页相关参数统一在sql语句后面加上limit分页的相关语句。6 总结逻辑分页:即内存分页,就是mybatis自带的rowbounds,内存开销大,数据量小效率比物理分页快,但大数据量,易内存溢出物理分页:上述2345,小数据量效率比逻辑分页慢,但是大数据量推荐用物理分页。物理分页总是优先于逻辑分页。

相关文章
|
SQL Java 数据库连接
Mybatis和MybatisPlus:数据库操作工具的对比
Mybatis和MybatisPlus:数据库操作工具的对比
1132 0
|
Java 中间件 数据库连接
分库分表的4种方案
分库分表的4种方案
2593 0
|
9月前
|
IDE Java 开发工具
JetBrains IntelliJ IDEA 2025.3 发布 - 领先的 Java 和 Kotlin IDE
JetBrains IntelliJ IDEA 2025.3 (macOS, Linux, Windows) - 领先的 Java 和 Kotlin IDE
829 0
|
9月前
|
存储 关系型数据库 MySQL
为什么MySQL索引结构是B+tree ?
MySQL采用B+树作为索引结构,因其非叶子节点仅存键值与指针,可存储更多键,降低树高,提升查询效率。数据集中于叶子节点并形成双向链表,支持高效稳定的范围查询。通常树高为2-3层,即可容纳上千万数据,显著优于二叉树或B树。
|
9月前
|
消息中间件 Cloud Native Java
SpringCloud概述
Spring Cloud是Spring推出的微服务一站式解决方案,弥补了分散技术栈的整合难题。它具备约定大于配置、组件丰富、开箱即用等特点,完美支持云原生架构。版本以伦敦地铁站命名,如Hoxton.SR12,避免与子项目版本冲突,便于统一管理。
SpringCloud概述
|
9月前
|
安全 Java 索引
说说 java 中常见的集合类
本文介绍了Java集合框架的核心接口(Collection、List、Set、Map)及其常见实现类。图示展示了类间关系,重点解析ArrayList、LinkedList、HashSet、HashMap等实现原理与性能特点,并指出线程安全及进阶特性,助你掌握集合体系关键知识点。
|
9月前
|
算法 安全 数据安全/隐私保护
比较一下 DES、AES、SM4
DES、AES和SM4均为对称加密算法。DES采用56位密钥,已不推荐使用;AES支持128、192、256位密钥,全球广泛采用;SM4为我国商用密码标准,支持128位密钥,主要用于国内信息安全领域。
|
9月前
|
算法 数据安全/隐私保护
比较一下 RSA、ECDSA 和 SM2
RSA、SM2均为非对称加密算法。SM2基于椭圆曲线,密钥长度256位,安全性高且运算更快;RSA依赖大数分解,密钥通常1024-4096位。SM2为国密算法,受国内政策支持。ECDSA与SM2原理相似。
|
9月前
|
安全
HTTP协议中请求方式GET 与 POST 什么区别 ?
简介:项目开发中常见GET与POST请求方式,主要区别在于参数传递位置、大小限制及安全性。GET用于获取数据,参数在URL中;POST用于提交数据,参数在请求体中,更安全。现代项目多采用RESTful风格,通过URL定位资源,不同请求方式(GET/POST/PUT/DELETE)对应不同操作,提升接口规范性与可读性。(238字)
HTTP协议中常见的状态码 ?
HTTP状态码分为1xx、2xx、3xx、4xx、5xx五类。常见状态码包括:101(切换协议,如WebSocket)、200(请求成功)、302(重定向)、401(未认证)、404(资源未找到)、500(服务器内部错误),广泛应用于Web开发中。

热门文章

最新文章