版权声明:本文为博主ExcelMann的原创文章,未经博主允许不得转载。
7、分页
作者:ExcelMann,转载需注明。
思考,为什么要用分页?
减少数据的处理量。
7.1、使用Limit实现分页(sql层面,常用)
使用sql的limit分页:
语法:select * from user limit startIndex,pageSize;
select * from user limit 0,2;
使用MyBatis实现分页,核心是SQL:
- 接口
// 分页查询所有用户
List<User> getLimitUserList(Map<String,Integer> map);
- mapper.xml
<!--分页查询所有用户-->
<select id="getLimitUserList" parameterType="map" resultType="user">
select * from mybatis.user limit #{startIndex},#{pageSize}
</select>
- 测试
public void selectLimitUser(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
Map<String, Integer> hashMap = new HashMap<String, Integer>();
hashMap.put("startIndex",0);
hashMap.put("pageSize",2);
List<User> limitUserList = mapper.getLimitUserList(hashMap);
for (User user : limitUserList) {
System.out.println(user);
}
sqlSession.close();
}
缺点:还是在代码中写sql传参!
7.2、RowBounds分页(java层面)
虽然是面向对象实现分页,但是没有直接写sql实现快。
在sql中,不存在limit,直接用java代码实现分页。
- 接口
// 分页查询所有用户2
List<User> getLimitUserListByRowBounds();
- mapper.xml
<!--分页查询所有用户2-->
<select id="getLimitUserListByRowBounds" resultType="user">
select * from mybatis.user
</select>
- 测试
@Test
public void selectLimitUserByRowBoudns(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
RowBounds rowBounds = new RowBounds(2, 2);
List<User> userList = sqlSession.selectList("com.Excelman.dao.UserMapper.getLimitUserListByRowBounds", null, rowBounds);
for (User user : userList) {
System.out.println(user);
}
sqlSession.close();
}