分页

为什么要分页?

想想淘宝,如果有一亿条数据,难道我们直接一次取出来?这会导致数据库崩溃的。

因此我们增加了分页,减少数据库数据的处理量

1.利用limit分页

select * from mybatis.user limit startIndex,pageSize;
# startIndex 是起始位置
# pageSize 是要查询的个数

limit给不同参数的情况

  1. 设置两个参数,第一个参数为-1:

    在以前,pageSize可以被设置为-1,但是被官方视为一个Bug,已经被修复了

  1. 只设置一个参数:

    从0开始查询参数个个数的数据

  • 接口:

    //对用户进行分页查询
    List<User> getUserByLimit(Map<String,Integer> map);
    
  • Mapper:
    <!--limit分页实现-->
    <select id="getUserByLimit" resultMap="UserMap" parameterType="map">
      select * from mybatis.user limit #{startIndex},#{pageIndex}
    </select>
    
  • 测试类:
    public void testGetUserByLimit(){
          SqlSession sqlSession = MybatisUtils.getSqlSession();
          UserMapper mapper = sqlSession.getMapper(UserMapper.class);
    
          Map<String,Integer> map = new HashMap<String, Integer>();
          map.put("startIndex",0);
          map.put("pageIndex",3);
          List<User> users = mapper.getUserByLimit(map);
          for (User user : users) {
              System.out.println(user);
          }
    
          sqlSession.close();
      }
    
  • 注意点:
    1. 在有多个参数的时候记得用map实现,虽然不是官方规定,但是是很流行的企业用法。

    2. Mapper里传入参数的名字一定要跟map里的key对应。

2.RowBounds实现分页

RowBoundes实现分页的核心思想就是sql只负责查询全部的数据,分页的活交给对象来做。

在sqlSession里有一个方法sqlSession.selectList,可以在参数里可以设置RowBounds。

RowBounds里可以设置起始位置和每页大小RowBounds rowBounds = new RowBounds(0,3)。

  • 接口:
    //对用户进行分页查询使用RowBounds
      List<User> getUserByRowBounds();
    
  • Mapper:
    <!--RowBound分页实现-->
      <select id="getUserByRowBounds" resultMap="UserMap">
          select * from mybatis.user
      </select>
    
  • 测试类:
    @Test
      public void testGetUserByRowBounds(){
          SqlSession sqlSession = MybatisUtils.getSqlSession();
    
          RowBounds rowBounds = new RowBounds(0,3);
          List<User> users = sqlSession.selectList("com.zhaox.Mapper.UserMapper.getUserByRowBounds", null, rowBounds);
          for (User user : users) {
              System.out.println(user);
          }
    
          sqlSession.close();
      }
    

3.Mybatis分页插件pageHelper

官网地址:https://pagehelper.github.io/


醉后不知天在水,满船清梦压星河