mybatis中分页的实现

一、基于sql语句limit的分页

<!--mapper映射文件中-->
<select id="selectuserlimit" resultType="com.wj.dao.pojo.User">
    select * from tb_user order by creationDate DESC
     limit #{from},#{pageSize}
</select>

第一个参数是相对于首行的偏移量,第二个参数是返回的行数

//mapper接口中
public List<User> selectuserlimit(
            @Param("from") Integer currentPage,
            @Param("pageSize") Integer pageSize
           
    );

***mybatis的分页也是基于limit实现的,当偏移量大是会对性能有所影响,因为 limit 1000,10 的执行是先获取1010条数据,然后去除前1000条,把剩余的10条给你。第一个参数,即偏移量的计算式为 (页码-1)× 页面容量。
***mybatis分页功能基于内存,先查所有再取出

二、分页类RowBounds实现分页

RowBounds是mybatis提供的处理分页的类

//mapper接口中
public List<User> selectuserlimit(
//            @Param("from") Integer currentPage,
//            @Param("pageSize") Integer pageSize
            RowBounds rowBounds //以该对象作为参数
    );
<select id="selectuserlimit" resultType="com.wj.dao.pojo.User">
    select * from tb_user order by creationDate DESC
     <!--limit #{from},#{pageSize}-->
     <!--使用rowbounds实现分页时不用写limit-->
</select>
//测试类
 @Test
    public void select_all() throws IOException {
        try (SqlSession sqlSession = MybatisUtil.createSqlsession()) {
            UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
            RowBounds rowBounds = new RowBounds(0,15);
            List<User> users = userMapper.selectuserlimit(rowBounds);
            for (User user : users) {
                System.out.println(user.getId()+"/"+user.getUserName()+"/"+user.getCreationDate());
            }
        }
    }
}

三、分页助手插件PageHelper完成分页

##1、引入依赖 pagehelper.jar和jsqlparser.jar

 <!-- https://mvnrepository.com/artifact/com.github.pagehelper/pagehelper -->
    <dependency>
      <groupId>com.github.pagehelper</groupId>
      <artifactId>pagehelper</artifactId>
      <version>5.3.2</version>
    </dependency>

通过maven引入,pagehelper时会自己添加jsqlparser依赖
##2、使用

<!--mybatis-congif.xml中 ,注意plugins标签的位置,要在别名之后,环境之前-->
<plugins>
<!--包名-->
<!--最新版5.3.2的类为下面配置的,而不是
com.github.pagehelper.PageHelper,
配置错会报错
PageHelper:com.github.pagehelper.PageHelper cannot be cast to org.apache.ibatis.plugin.Interceptor
-->
<plugin interceptor="com.github.pagehelper.PageInterceptor">
<!--数据库方言-->
<!--<property name="dialect" value="mysql"/>-->
<!--分页查询总数-->
<property name="rowBoundsWithCount" value="true"/>
<!--支持mapper接口传递分页参数-->
<property name="supportMethodsArguments" value="true"/>
</plugin>
</plugins>
//接口照常写
 public List<User> sellectall();
<!--映射语句照常写-->
<select id="sellectall" resultType="com.wj.dao.pojo.User">
select *
from tb_user <!--sql语句结束后不要写冒号,不然语句拼接会出错-->
</select>
//使用分页助手
 @Test
    public void fun1(){
        SqlSession session = MybatisUtil.createSqlsession();
        UserMapper userMapper = session.getMapper(UserMapper.class);
        //开启分页,传入参数
        PageHelper.startPage(1,5);
        //查询数据
        List<User> users = userMapper.sellectall();
        //将数据放入分页对象
        PageInfo<User> userPageInfo = new PageInfo<User>(users);
        //查看结果userPageInfo.getList()
        for (User user : userPageInfo.getList()) {
            System.out.println(user.getId()+"/"+user.getUserName()+"/"+user.getCreationDate());
        }
        session.close();
    }

更多PageHelper的使用请参考pagehelper 项目在github地址

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值