目录
- 手动分页
- Sql 分页
- SQL LIMIT 子句
- 实例代码
- 问题
- 附录
对于分页需求存在不同的实现方式,在这里收集了两种不同的实现方法
手动分页
查询出全部数据,随后再手动截取需要的部分,可能增加数据库压力
1 2
| List<Student> queryStudentsByArray();
|
1 2 3 4
| <select id="queryStudentsByArray" resultMap="studentmapper"> select * from student </select>
|
1 2 3 4 5 6 7 8 9 10
| 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); }
|
随后通过Controller
即可调用 Service 完成分页
Sql 分页
SQL LIMIT 子句
要检索查询返回的行的一部分,使用 LIMIT
和 OFFSET
子句
1 2 3 4 5 6
| SELECT column_list FROM table1 ORDER BY column_list LIMIT row_count OFFSET offset;
|
参数 | 含义 |
---|
row_count | 确定将返回的行数 |
OFFSET | 子句在开始返回行之前跳过的偏移行个数 |
OFFSET
子句是可选的,如果同时使用LIMIT
和OFFSET
子句,OFFSET
会在LIMIT
约束行数之前先跳过偏移行,在使用LIMIT
子句时,使用ORDER BY
子句确保返回的行按指定顺序非常重要
实例代码
1 2
| List<Student> queryStudentsBySql(Map<String,Object> data);
|
1 2 3 4
| <select id="queryStudentsBySql" parameterType="map" resultMap="studentmapper"> select * from student limit #{currIndex} , #{pageSize} </select>
|
1 2 3 4 5 6 7
| public List<Student> queryStudentsBySql(int currPage, int pageSize) { Map<String, Object> data = new HashedMap(); data.put("currIndex", (currPage-1)*pageSize); data.put("pageSize", pageSize); return studentMapper.queryStudentsBySql(data); }
|
问题
本小节将记录存在进行 MyBatis 分页时遇到的错误以及解决方案
附录
Mybatis 四种分页方式
Could not set parameters for mapping 错误与 mybatis 源码追踪
易百教程
【Mybatis】Mybatis 常见的分页实现方法