1. mysql的分页语句
select * from user limit #{startIndex},#{pageSize};
# startIndex : 起始位置 ,默认是0开始
# pageSize :页面大小
# 如何计算出当前页面
currentPage = (currentPage-1)* pageSize
2.使用limit实现分页【##】
1) 编写dao接口
//查询全部用户实现分页
List<User> selectUserByLimit(Map<String,Integer> map);
2) 编写对应mapper映射文件的方法
【参数我们可以使用map封装,方便参数传递】
<select id="selectUserByLimit" parameterType="Map" resultType="User">
select * from mybatis.user limit #{startIndex},#{pageSize}
</select>
3)测试
【模拟分页数据:currentPage,pageSize】
@Test
public void selectUserByLimit(){
//创建sqlSession
SqlSessionFactory sqlSessionFactory = MyBatisUtils.getSqlSessionFactory();
SqlSession sqlSession = sqlSessionFactory.openSession();
//准备数据
int currentPage = 2;//当前是第几页
int pageSize = 2; //页面大小
Map<String, Integer> map = new HashMap<String, Integer>();
map.put("startIndex",(currentPage-1)*pageSize);
map.put("pageSize",pageSize);
//测试
UserDao mapper = sqlSession.getMapper(UserDao.class);
List<User> users = mapper.selectUserByLimit(map);
for (User user : users) {
System.out.println(user);
}
sqlSession.close();//关闭连接
}
3. 使用RowBounds实现分页(了解)
1)写接口
//查询全部用户实现分页使用RowBounds
List<User> selectUserByRowBounds();
2)写Mapper映射文件
<select id="selectUserByRowBounds" resultType="User">
select * from mybatis.user
</select>
3)编写测试代码
@Test
public void selectUserByRowBounds(){
//创建sqlSession
SqlSessionFactory sqlSessionFactory = MyBatisUtils.getSqlSessionFactory();
SqlSession sqlSession = sqlSessionFactory.openSession();
int currentPage = 2; //当前页
int pageSize = 2; //页面大小
RowBounds rowBounds = new RowBounds((currentPage - 1) * pageSize, pageSize);
//注意点;使用RowBounds就不能使用getMapper了
//selectList: 接收一个List
//selectMap: 接收一个Map
//selectOne : 接收只有一个对象的时候
List<User> users = sqlSession.selectList("com.kuang.dao.UserDao.selectUserByRowBounds", null, rowBounds);
for (User user : users) {
System.out.println(user);
}
}
limit 和 rowBounds区别
- rowBounds 本质就是封装了limit
- limit 是在SQL层面实现分页
- rowBounds 在代码层面实现分页