MyBatis分页详解(3种主流分页方式)

MyBatis分页详解(3种主流分页方式)-mikechen

MyBatis分页主要有:原生Limit分页、RowBounds分页、以及PageHelper插件等MyBatis分页方式@mikechen

原生SQL的Limit分页

1.Limit语法

SELECT * FROM table LIMIT stratIndex,pageSize

 

2.修改Mapper文件

<select id="selectUser" parameterType="map" resultType="user">
  select * from user limit #{startIndex},#{pageSize}
</select>

 

3.业务代码

在实际使用limit,是根据前端传进来页码和每页的条数,在sql使用limit进行查询。

//分页查询 , 两个参数startIndex , pageSize
@Test
public void testSelectUser() {
   SqlSession session = MybatisUtils.getSession();
   UserMapper mapper = session.getMapper(UserMapper.class);

   int currentPage = 1;  //第几页
   int pageSize = 2;  //每页显示几个
   Map<String,Integer> map = new HashMap<String,Integer>();
   map.put("startIndex",(currentPage-1)*pageSize);
   map.put("pageSize",pageSize);

   List<User> users = mapper.selectUser(map);

   for (User user: users){
       System.out.println(user);
  }

   session.close();
}

 

使用PageHelper插件分页

PageHelper还是很好用的,主要分为如下三大步骤。

第一步:导入分页插件依赖

<!-- pagehelper 分页插件-->
<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper</artifactId>
    <version>5.2.0</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.76</version>
</dependency>

 

第二步:在mybaits-config.xml配置使用分页插件

<plugins>
  <!-- 配置mybatis分页插件PageHelper -->
  <!-- com.github.pagehelper为PageHelper类所在包名 -->
  <plugin interceptor="com.github.pagehelper.PageInterceptor"></plugin>
</plugins>

 

第三步:业务层代码

@Test
    public void selectUserPageHelper() {
        SqlSession session = MybatisUtils.getSession();
        UserMapper mapper = session.getMapper(UserMapper.class);
        //第二种,Mapper接口方式的调用,推荐这种使用方式。
        PageHelper.startPage(1, 3);
        List<User> list = mapper.getUserInfo();
        //用PageInfo将包装起来
        PageInfo page = new PageInfo(list);
        for (User map: list){
            System.out.println(map);
        }
        System.out.println("page:---"+page);
        session.close();
    }

 

RowBounds分页

RowBounds 本质就是封装了limit,我们只需要在业务层关注分页即可,无须再传入指定数据。

Mybatis内置了一个专门处理分页的类:RowBounds,我们使用它可以轻松完成分页。

RowBounds分页主要包含,如下3个步骤:

1.定义接口方法

//分页查询所有用户,通过自带的RowBounds
List<User> selectAllUserByRowBounds(RowBounds rowBounds);

2.SQL映射

<!-- 分页查询所有用户,通过自带的RowBounds -->
<select id="selectAllUserByRowBounds" resultMap="userMap">
    select * from t_user
</select>

3.业务代码

//分页查询所有用户信息,通过自带的RowBounds
@Test
public void selectAllUserByRowBounds(){
    int currPage=2;//当前页码
    int pageSize=3;//当前页显示记录数量
    //注意:currPage和start别搞错了,一个表示当前页码,一个是从第几行读取记录
    int start = (currPage-1)*pageSize;//计算从第几行读取记录
    RowBounds rowBounds = new RowBounds(start,pageSize);
    List<User> userList = mapper.selectAllUserByRowBounds(rowBounds);
    for (User user : userList) {
        System.out.println(user);
    }
}

 

陈睿mikechen

10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。

关注「mikechen」公众号,获取更多技术干货!

后台回复面试即可获取《史上最全阿里Java面试题总结》,后台回复架构,即可获取《阿里架构师进阶专题全部合集

评论交流
    说说你的看法