分页
前言: 当数据量过大时,可能会导致各种各样的问题发生,例如:服务器资源被耗尽,因数据传输量过大而使处理超时。最终都会导致查询无法完成。解决这个问题的一个策略就是“分页查询”,也就是说不要一次性查询所有的数据,每次只查询一“页“的数据。这样分批次地进行处理,可以呈现出很好的用户体验,对服务器资源的消耗也不大。
下面我们来看一下在MyBatis中,如何简洁的使用分页查询。
主要介绍:limit分页
,RowsBound分页
limit分页:
-
语法:
SELECT * FROM user limit startindex,pagesize;
-
步骤:
在UserMapper接口中创建方法:
//分页
List<User> getUserByLimit(Map<String,Integer> map);
在UserMapper.xml中实现:
<!--结果集映射-->
<resultMap id="userMap" type="user">
<!--column数据库中的字段,property实体类中的属性-->
<result column="password" property="pd" />
</resultMap>
<select id="getUserByLimit" parameterType="map" resultMap="userMap">
select * from user limit #{startIndex},#{pageSize}
</select>
测试:
@Test
public void testlimit(){
SqlSession sqlSession=MyBatisUtils.getSqlSession();
UserMapper userMapper=sqlSession.getMapper(UserMapper.class);
HashMap<String,Integer> hashMap=new HashMap<String, Integer>();
hashMap.put("startIndex",0);
hashMap.put("pageSize",2);
List<User> userList=userMapper.getUserByLimit(hashMap);
for (User user : userList) {
System.out.println(user);
}
sqlSession.close();
}
测试结果:
RowsBounds分页:
不再使用sql实现分页,使用Java层面
实现。
- 步骤:
在UserMapper接口中创建方法:
List<User> getUserByRowsBounds();
在UserMapper.xml中实现:
<resultMap id="userMap" type="user">
<!--column数据库中的字段,property实体类中的属性-->
<result column="password" property="pd" />
</resultMap>
<select id="getUserByRowsBounds" resultMap="userMap">
select * from user
</select>
测试:
@Test
public void testRowsBounds(){
SqlSession sqlSession=MyBatisUtils.getSqlSession();
//RowsBounds实现
RowBounds rowBounds=new RowBounds(0,2);
//通过Java代码实现分页
List<User> userList= sqlSession.selectList("dao.UserMapper.getUserByRowsBounds",null,rowBounds);
for (User user : userList) {
System.out.println(user);
}
sqlSession.close();
}
测试结果: