分页

分页的方式有两种,一种是利用SQL的limit语句传统分页,一种是使用RowBounds进行分页。

1. Limit

使用此方法需要多传递两个参数,一个是开始的索引,一个是每页的个数。

1.1. SQL语法

SELECT
    * 
FROM
USER 
    LIMIT startIndex,pageSize

1.2. 用例

  1. 接口:

    /**
         * limit查询用户
         * @param map
         * @return
         */
    List<User> getUserListByLimit(Map<String, Integer> map);
    
  2. mapper

    <select id="getUserListByLimit" resultType="User" parameterType="map">
      select *
      from user limit #{startIndex},#{pageSize}
    </select>
    
  3. 测试

    @Test
    public void getUserListByLimit() {
      SqlSession sqlSession = null;
      HashMap<String, Integer> map = new HashMap<>();
      map.put("startIndex", 0);
      map.put("pageSize", 2);
      try {
        sqlSession = MyBatisUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        List<User> userListByLimit = mapper.getUserListByLimit(map);
        for (User user : userListByLimit) {
          System.out.println(user);
        }
      } finally {
        sqlSession.close();
      }
    }
    

2. RowBounds

使用RowBounds不需要在SQL语句层面进行分页。方法比较老。

2.1. 语法

// 开始索引和每页个数
RowBounds rowBounds = new RowBounds(startIndex, pageSize);
sqlSession = MyBatisUtils.getSqlSession();
// 带包名和类名的方法路径
List<User> users = sqlSession.selectList(path null, rowBounds);

2.2. 用例

  1. 接口

    /**
         * RowBounds查询用户
         * @return
         */
    List<User> getUserListByRowBounds();
    
  2. mapper

    <select id="getUserListByRowBounds" resultType="User">
      select *
      from user
    </select>
    
  3. 测试

    @Test
    public void getUserListByRowBounds() {
      SqlSession sqlSession = null;
      try {
        // startIndex pageSize
        RowBounds rowBounds = new RowBounds(0, 2);
        sqlSession = MyBatisUtils.getSqlSession();
        // 带包名和类名的方法路径
        List<User> users = sqlSession.selectList("org.gs.mapper.user.UserMapper.getUserListByRowBounds", null, rowBounds);
        for (User user : users) {
          System.out.println(user);
        }
      } finally {
        sqlSession.close();
      }
    }
    

3. Mybatis PageHelper插件

官网

目前暂时列举其中一个方法。

3.1. 使用方法

只需要在检索语句前面加上PageHelper.startPage(startPage, pageSize);语句即可,不需要做其余改动。

// 开始页数(从1开始),页面大小
PageHelper.startPage(1, 2);
List<User> users = sqlSession.getMapper(UserMapper.class).getUserListByPageHelper();

3.2. 配置过程

  1. 导入Maven坐标

    <dependency>
      <groupId>com.github.pagehelper</groupId>
      <artifactId>pagehelper</artifactId>
      <version>5.2.1</version>
    </dependency>
    
  2. 配置拦截器插件

    <plugins>
      <!-- com.github.pagehelper为PageHelper类所在包名 -->
      <plugin interceptor="com.github.pagehelper.PageInterceptor">
        <!--具体参数暂不展开-->
        <!--<property name="param1" value="value1"/>-->
      </plugin>
    </plugins>
    

3.3. 用例

  1. 接口

    /**
         * 通过PageHelper查询用户
         * @return
         */
    List<User> getUserListByPageHelper();
    
  2. mapper

    <select id="getUserListByPageHelper" resultType="User">
      select *
      from user
    </select>
    
  3. 测试

    @Test
    public void getUserListByPageHelper() {
      SqlSession sqlSession = null;
      try {
        // startIndex pageSize
        sqlSession = MyBatisUtils.getSqlSession();
        // 开始页数(从1开始),页面大小
        PageHelper.startPage(1, 2);
        List<User> users = sqlSession.getMapper(UserMapper.class).getUserListByPageHelper();
        for (User user : users) {
          System.out.println(user);
        }
      } finally {
        sqlSession.close();
      }
    }
    
Copyright © rootwhois.cn 2021-2022 all right reserved,powered by GitbookFile Modify: 2023-03-05 10:55:52

results matching ""

    No results matching ""