前言
我们的数据库会被请求很多数据,但是如果数据是很多的时候,我们肯定是分批返回而不是全部返回。所以在实际开发中,我们会对数据进行分页。
分页
分页操作的本质就是MySQL
中的 limit
关键字,之前我们检索数据的做法是:
1 | select * from users; |
实际工作中,我们并不会这么用,因为数据库的数据随着时间的增加肯定是越来越多的,有可能是 1W、10W、100W,但是作为人我们没有办法一次性看这么多,而且性能上也是不允许。一般我们会使用 limit 来对其进行限制
1 | -- 这句话就是从头部开始十五条 |
2 | select * from users limit 0, 15; |
有了这个基础我们就知道如何写 mybatis 了。无非就是组装这个 sql 嘛。还是将就上一篇文章的项目
1 | package com.yubulang.dao; |
2 | |
3 | import com.yubulang.pojo.User; |
4 | |
5 | import java.util.List; |
6 | import java.util.Map; |
7 | |
8 | public interface UserMapper { |
9 | User getUserById(int id); |
10 | |
11 | List<User> getUserByPage(Map<String, Integer> map); |
12 | } |
UserMapper.xml
1 |
|
2 |
|
3 |
|
4 |
|
5 | |
6 | <mapper namespace="com.yubulang.dao.UserMapper"> |
7 | <select id="getUserById" parameterType="int" resultType="User"> |
8 | select * |
9 | from users |
10 | where id = #{id}; |
11 | </select> |
12 | |
13 | <select id="getUserByPage" parameterType="map" resultType="User"> |
14 | select * from users limit #{offset}, #{pageSize} |
15 | </select> |
16 | </mapper> |
测试代码:
1 |
|
2 | public void testGetUserByPage() { |
3 | SqlSession sqlSession = MybatisUtils.getSqlSession(); |
4 | |
5 | UserMapper mapper = sqlSession.getMapper(UserMapper.class); |
6 | |
7 | Map<String, Integer> map = new HashMap<String, Integer>(); |
8 | map.put("offset", 0); |
9 | map.put("pageSize", 2); |
10 | |
11 | List<User> userList = mapper.getUserByPage(map); |
12 | |
13 | for (User user : userList) { |
14 | System.out.println(user); |
15 | } |
16 | |
17 | sqlSession.close(); |
18 | } |
总结
其实分页还有 RowBounds 和分页插件,这个感兴趣的可以自行查询,其实本质都是不变的,就是 SQL 语句 Limit 的控制。