3.分页

简介: 本文介绍了MyBatis中的分页技术,包括四种主要方法:自带`RowBounds`分页、第三方插件PageHelper、SQL分页以及数组分页。`RowBounds`通过内存处理所有查询结果实现分页;PageHelper插件能智能识别数据库类型并自动添加相应的分页关键字;SQL分页直接利用SQL语句中的`LIMIT`或类似关键字;数组分页则是查询所有数据后使用`subList`进行切片。此外,还提到了自定义拦截器实现分页的方式。物理分页虽在小数据量场景下效率较低,但在大数据量时更为适用,优于逻辑分页。

3.分页

1 自带rowbound分页
先将所有的结果集查询出来ResultSet,再进行内存分页(limit)

2 第三方插件pagehelper
会将一个查询SQL变成两部分执行,假设SQL是:select name from user;
①自动识别数据库类型,添加对应的分页关键字,如MySQL则limit,Oracle则rownum,DB2则fetch,查找出上面SQL的结果
②查找出上面结果,查询结果的总条数count
3 SQL分页
依赖limit进行实现,或者rownum等自身的SQL实现
4 数组分页

简而言之:查全部再subList

首先在dao层,创建StudentMapper接口,用于对数据库的操作。在接口中定义通过数组分页的查询方法,如下所示:
方法很简单,就是获取所有的数据,通过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


@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


@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,小数据量效率比逻辑分页慢,但是大数据量推荐用物理分页。
物理分页总是优先于逻辑分页。

目录
打赏
0
9
9
0
33
分享
相关文章
用D3制作矩形式树状结构图(Treemapping)并设计动画效果
矩形式树状结构图一般可以简称为Treemapping。Treemapping的各种制作方法网络上已经流行了许久,但是鲜有人在此之上有创作新意的,我在此基础上制作了一些动画效果供大家参考
642 0
2-MongoDB单机部署
本文档详述了MongoDB单机部署的过程,包括在Windows与Linux系统下的安装与启动步骤。在Windows系统中,用户需从MongoDB官网下载适合的预编译二进制安装包,并选择稳定版本进行安装。安装后可通过命令行参数或配置文件启动服务,并利用`mongo`命令或Compass客户端进行连接。对于Linux系统,部署流程类似,涉及下载压缩包、解压、配置文件设定等步骤,同样可通过命令行或Compass进行连接测试。文档还提供了启动、连接及关闭服务的具体命令示例,以及防火墙配置和故障处理建议。
4-MongoDB索引知识
MongoDB通过索引提升查询效率,避免全集合扫描。索引采用B树结构存储部分数据集,按字段值排序,支持快速匹配与排序查询。主要类型包括:单字段索引,支持升序/降序;复合索引,字段顺序影响排序逻辑;地理空间索引,适用于坐标数据查询;文本索引,用于搜索字符串内容;哈希索引,用于散列分片,仅支持等值查询。更多详情参见官方文档:[MongoDB索引指南](https://docs.mongodb.com/manual/indexes/)。
3-MongoDB常用命令
本文档介绍MongoDB中关于文章评论数据的操作命令。首先定义了一个名为`articledb`的数据库及评论数据结构,包括评论ID、文章ID、内容、用户ID、昵称、创建时间、点赞数、状态等字段。随后详细讲解了数据库与集合的创建、选择、删除等基础操作,并提供了具体示例。此外,还介绍了文档的增删改查等基本CRUD操作,包括单个文档和批量文档的插入、查询、更新和删除的方法及参数说明。文档进一步解释了如何进行投影查询、批量更新以及使用`$inc`运算符来增量更新数值字段。最后,讲解了如何进行分页查询和排序操作,帮助用户高效管理大量评论数据。
2.映射关系(1-1 1-n n-n)
本文介绍了MyBatis框架中处理不同类型的关联关系(一对一、一对多、多对一及多对多)的方法。一对一关联可通过简单的属性字段映射实现;一对多关联需要在相关类中添加列表属性,并在Mapper文件中使用`&lt;collection&gt;`标签进行配置;多对一关联则需在Mapper文件中使用`&lt;association&gt;`标签来指定关联对象;对于多对多关联,通常需要定义一个中间类并在双方类中分别添加集合属性,通过`&lt;collection&gt;`标签完成映射。
嵌入式AI控制单元整体设计思路
【8月更文挑战第3天】嵌入式AI控制单元整体设计思路。
109 11
计算机硬件存储器中数据流平滑
【8月更文挑战第3天】
97 10
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问