分页
为什么要分页
在学习mybatis等持久层框架的时候,会经常对数据进行增删改查操作,使用最多的是对数据库进行查
询操作,如果查询大量数据的时候,我们往往使用分页进行查询,也就是每次处理小部分数据,这样对
数据库压力就在可控范围内。
1.使用limit分页
limit使用的是物理分页
语法:
SELECT * FROM table LIMIT stratIndex,pageSize
startIndex—起始位置 pageSize-----页面大小
示列:
seletct * from user limit 2,5
从第二个数开始查询,页面大小为5 即 1—6 第二个数据到第七个数据
select * from user limit n == select * from limit 0,n
检索前n个数据
步骤:
1.Mapper接口添加方法:
//limit分页查询
List<User> getUserByLimit(Map<String,Integer> map);
2.修改Mapper文件
<select id="getUserByLimit" parameterType="map" resultType="user" resultMap="usermap">
select * from mybatis.user limit #{startIndex},#{pageSize}
</select>
测试方法:
@Test
public void getUserByLimit(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
HashMap<String, Integer> map = new HashMap<String, Integer>();
map.put("startIndex",0);
map.put("pageSize",2);
List<User> user = mapper.getUserByLimit(map);
for (User user1 : user) {
System.out.println(user1);
}
sqlSession.close();
}
查询结果: 0至1
2 RowBounds分页
RowBounds使用的是逻辑分页
我们除了使用Limit在SQL层面实现分页,也可以使用RowBounds在Java代码层面实现分页
官方不推荐使用 了解即可 不重要
1.Mapper接口:
//选择全部用户RowBounds实现分页
List<User> geUserByRowBounds();
2.Mapper文件:
<select id="getUserByRowBounds" resultMap="usermap" resultType="user" >
select * from mybatis.user
</select>
测试方法1:
@Test
public void getUserByRowBounds(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
//通过java代码层面实现分页
List<User> userList = sqlSession.selectList("com.lx.dao.UserMapper.getUserByRowBounds");
for (User user : userList) {
System.out.println(user);
}
sqlSession.close();
}
测试方法2:
@Test
public void getUserByRowBounds(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
// UserMapper mapper = sqlSession.getMapper(UserMapper.class);
//通过RowBounds来实现
RowBounds rowBounds = new RowBounds(1, 2);
//通过java代码层面实现分页
List<User> userList = sqlSession.selectList("com.lx.dao.UserMapper.getUserByRowBounds",null,rowBounds);
for (User user : userList) {
System.out.println(user);
}
// //通过java代码层面实现分页
// List<User> userList = sqlSession.selectList("com.lx.dao.UserMapper.getUserByRowBounds");
// for (User user : userList) {
// System.out.println(user);
// }
sqlSession.close();
}
对应文件:mybatis-04