分页
为什么要分页?
想想淘宝,如果有一亿条数据,难道我们直接一次取出来?这会导致数据库崩溃的。
因此我们增加了分页,减少数据库数据的处理量、
1.利用limit分页
select * from mybatis.user limit startIndex,pageSize;
# startIndex 是起始位置
# pageSize 是要查询的个数
limit给不同参数的情况
- 设置两个参数,第一个参数为-1:
在以前,pageSize可以被设置为-1,但是被官方视为一个Bug,已经被修复了
- 只设置一个参数:
从0开始查询参数个个数的数据
-
接口:
//对用户进行分页查询 List<User> getUserByLimit(Map<String,Integer> map);
- Mapper:
<!--limit分页实现--> <select id="getUserByLimit" resultMap="UserMap" parameterType="map"> select * from mybatis.user limit #{startIndex},#{pageIndex} </select>
- 测试类:
public void testGetUserByLimit(){ SqlSession sqlSession = MybatisUtils.getSqlSession(); UserMapper mapper = sqlSession.getMapper(UserMapper.class); Map<String,Integer> map = new HashMap<String, Integer>(); map.put("startIndex",0); map.put("pageIndex",3); List<User> users = mapper.getUserByLimit(map); for (User user : users) { System.out.println(user); } sqlSession.close(); }
- 注意点:
- 在有多个参数的时候记得用map实现,虽然不是官方规定,但是是很流行的企业用法。
-
Mapper里传入参数的名字一定要跟map里的key对应。
2.RowBounds实现分页
RowBoundes实现分页的核心思想就是sql只负责查询全部的数据,分页的活交给对象来做。
在sqlSession里有一个方法sqlSession.selectList,可以在参数里可以设置RowBounds。
RowBounds里可以设置起始位置和每页大小RowBounds rowBounds = new RowBounds(0,3)。
- 接口:
//对用户进行分页查询使用RowBounds List<User> getUserByRowBounds();
- Mapper:
<!--RowBound分页实现--> <select id="getUserByRowBounds" resultMap="UserMap"> select * from mybatis.user </select>
- 测试类:
@Test public void testGetUserByRowBounds(){ SqlSession sqlSession = MybatisUtils.getSqlSession(); RowBounds rowBounds = new RowBounds(0,3); List<User> users = sqlSession.selectList("com.zhaox.Mapper.UserMapper.getUserByRowBounds", null, rowBounds); for (User user : users) { System.out.println(user); } sqlSession.close(); }
3.Mybatis分页插件pageHelper
官网地址:https://pagehelper.github.io/
Comments | NOTHING