Mybatis分页查询
分页之前,考虑清楚一个问题,为什么需要分页呢?
- 目的:减少数据的处理量
1.使用Limit分页
SQL语法:
#语法:SELECT * from user limit startIndex,pageSize; 每页显示pageSize 从startIndex开始查
select * from user limit 0,2;
select * from user limit 2,2;
select * from user limit 0,-1; #从4到最后一个值
select * from user limit 3; #[0,3] 从0到这个地方
**使用Mybatis实现分页,核心还是SQL!
1.1接口
/**
* 分页查询
* @param map
* @return
*/
List<User> getUserByLimit(Map<String,Integer> map);
1.2Mapper.xml
<!--//分页-->
<select id="getUserByLimit" parameterType="map" resultMap="UserMap">
select * from mybatis.user limit #{startIndex},#{pageSize}
</select>
1.3测试
@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> userByLimit = mapper.getUserByLimit(map);//里面需要传map 所以需要构建一个map出来
for (User user : userByLimit) {
System.out.println(user);
}
sqlSession.close();
}
2.RowBounds分页
Java中万物皆对象 不再使用SQL实现分页
2.1接口
/**
* 分页查询2
* RowBounds
* @return
*/
List<User> getUserByRowBounds();
2.2Mapper.xml
<!--分页2-->
<select id="getUserByRowBounds" resultMap="UserMap">
select * from mybatis.user
</select>
2.3测试
@Test
public void getUserByRowBounds(){
SqlSession sqlSession = MybatisUtils.getSqlSession();
//通过RowBounds实现分页
RowBounds rowBounds = new RowBounds(1, 2);//从第一个数据开始 每页显示两个
//通过Java代码层面实现分页
List<User> userList = sqlSession.selectList("com.hang.dao.UserMapper.getUserByRowBounds",null,rowBounds);
for (User user : userList) {
System.out.println(user);
}
sqlSession.close();
}
}
//select * from mybatis.user where id = #{id}
//类型处理器(如果属性字段和数据库字段一样,直接转义了 现在也做这个事情 现在去找属性pwd去了 发现找不到)
//select id,name,pwd from mybatis.user where id = #{id} 完整是这么写
3.分页插件
这里了解即可