Mybatis-分页的两种实现方法

分页的实现

mysql的分页语句

select * from user limit #{startIndex},#{pageSize};
# startIndex : 起始位置 ,默认是0开始
# pageSize :页面大小
# 如何计算出当前页面
currentPage = (currentPage-1* pageSize  

使用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();//关闭连接
    
    }

使用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在代码层面实现分页

你可能感兴趣的:(Mybatis-分页的两种实现方法)