为什么要分页:
减少数据的处理量
1、使用limit分页
数据库:
-- 语法
select * from `user` limit startIndex,pageSize;
select * from `user` limit 2; #[0,2]
-- 相当于
select * from `user` limit 0,2;
使用mybatis实现分页,核心sql
(1)接口
/**
* 分页查询
* @param map
* @return
*/
List<User> getUserByLimit(Map<String, Integer> map);
(2)Mapper.xml
<select id="getUserByLimit" parameterType="map" resultMap="userMap">
select id, name, pwd from `user` limit #{startIndex},#{pageSize}
</select>
(3)测试
@Test
public void getUserByLimit() {
SqlSession sqlSession = null;
try {
sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
Map<String, Integer> map = new HashMap<>(16);
map.put("startIndex", 0);
map.put("pageSize", 2);
List<User> userList = mapper.getUserByLimit(map);
for (User user : userList) {
logger.info(user);
}
} finally {
if (sqlSession != null) {
sqlSession.close();
}
}
}
2、RowBounds分页
不在使用sql实现分压
(1)接口
/**
* 分页查询
* @return
*/
List<User> getUserByRowBounds();
(2)Mapper.xml
<select id="getUserByRowBounds" resultMap="userMap">
select id, name, pwd from `user`
</select>
(3)测试
@Test
public void getUserByRowBounds() {
SqlSession sqlSession = null;
try {
sqlSession = MybatisUtils.getSqlSession();
RowBounds rowBounds = new RowBounds(1,2);
List<User> userList = sqlSession.selectList("com.gt.dao.UserMapper.getUserByRowBounds",null, rowBounds);
for (User user : userList) {
logger.info(user);
}
} finally {
if (sqlSession != null) {
sqlSession.close();
}
}
}
扩展: