[Mybatis]limit/RowBounds/PageHelper实现分页

290 阅读1分钟

思考:为什么要使用分页?

减少数据的处理量

使用limit分页

语法: select * from user limit startIndex,pageSize;

  • 接口
/**
 * 分页
 * @param map
 * @return
 */
List<User> getUserByLimit(Map<String,Integer> map);
  • Mapper.xml
<!--分页-->
<select id="getUserByLimit" parameterType="map" resultMap="UserMap">
    select * from user limit #{startIndex},#{pageSize}
</select>
  • 测试类
@Test
public void getUserLimit(){
    SqlSession sqlSession = MybatisUtils.getSqlSession();
    UserMapper mapper = sqlSession.getMapper(UserMapper.class);

    Map<String,Integer> map = new HashMap<>();
    map.put("startIndex",0);
    map.put("pageSize",2);

    List<User> userByLimit = mapper.getUserByLimit(map);
    userByLimit.forEach(u -> {
        System.out.println(u);
    });
}

RowBounds分页

不通过sql处实现分页

  • 接口
    /**
     * RowBounds分页
     * @return
     */
    List<User> getUserRowBounds();
  • mapper.xml
<!--RowBounds实现分页-->
<select id="getUserRowBounds" resultMap="UserMap">
    select * from user
</select>
  • 测试类
@Test
public void getUserRowBounds(){
    SqlSession sqlSession = MybatisUtils.getSqlSession();

    // rowBounds实现
    RowBounds rowBounds = new RowBounds(1, 2);
    // 通过java层面实现分页
    List<User> users = sqlSession.selectList("com.mybatisstudy.dao.UserMapper.getUserRowBounds",null,rowBounds);

    users.forEach(user -> {
        System.out.println(user);
    });

    sqlSession.close();
}

分页插件PageHelper

PageHelper文档地址 (pagehelper.github.io)

<dependency> 
    <groupId>com.github.pagehelper</groupId> 
    <artifactId>pagehelper</artifactId> 
    <version>最新版本</version> 
</dependency>