【分页】常见两种SpringBoot项目中分页技巧

1.sql语句物理分页

    @Select("select * from user limit #{curPage},#{pageSize}")
    List<UserVO> FindByPage (Integer curPage, Integer pageSize);

mapper层

@RequestMapping("page")
public Map FindByPage(@RequestParam(value = "curPage",defaultValue = "1")Integer curPage
                     ,@RequestParam(value = "pageSize",defaultValue = "5")Integer pageSize){
  // controller传页数 (curPage-1)*pageSize 的逻辑处理
  List<UserVO> userVOS = pageService.FindByPage((curPage-1)*pageSize, pageSize);
        
  HashMap map = new HashMap();
  if (userVOS != null){
      map.put("code",200);
      map.put("查询结果",userVOS);
  }else {
      map.put("code",404);
      map.put("查询结果","没有查到");
   }
  return map;
}

controller层

2.使用myabtis插件(pagehelper)

<!--pagehelper分页插件-->
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper</artifactId>
            <version>5.0.3</version>
        </dependency>
<!--pagehelper插件配置文件-->
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper-spring-boot-autoconfigure</artifactId>
            <version>1.2.3</version>
        </dependency>
<!--pagehelper插件配置文件-->
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper-spring-boot-starter</artifactId>
            <version>1.2.3</version>
        </dependency>

导入pom

pagehelper.helper-dialect=mysql
pagehelper.reasonable=true
pagehelper.support-methods-arguments=true
pagehelper.params=count=countSql
pagehelper.page-size-zero=true
spring.main.allow-circular-references=true

application.properties文件中写入配置

    @Select("select * from user")
    List<UserVO> FindByMybatisPage();

mapper层不用写Limit

    @RequestMapping("mybatispage")
    public Map FindByMybatisPage(@RequestParam(value = "curPage",defaultValue = "1")Integer curPage, @RequestParam(value = "pageSize",defaultValue = "5")Integer pageSize){

        HashMap map = new HashMap();
        List<UserVO> userVOS = pageService.FindByMybatisPage((curPage - 1) * pageSize, pageSize);
        if (userVOS != null){
            map.put("code",200);
            map.put("查询结果",userVOS);
        }else {
            map.put("code",404);
            map.put("查询结果","没有查到");
        }
        return map;
    }

controller还是如正常写

    @Override
    public List<UserVO> FindByMybatisPage(Integer curPage,Integer pageSize) {
        PageHelper.startPage(curPage,pageSize);//底层AOP 必须在方法的第一行加分页代码
        List<UserVO> userVO = pageMapper.FindByMybatisPage();
        return userVO;
    }

service层使用 PageHelper.startPage API完成分页


1. PageHelper的大概原理

PageHelper是MyBatis的一个插件,内部实现了一个PageInterceptor拦截器。Mybatis会加载这个拦截器到拦截器链中。在我们使用过程中先使用PageHelper.startPage这样的语句在当前线程上下文中设置一个ThreadLocal变量,再利用PageInterceptor拦截器这个分页拦截器拦截,从ThreadLocal中拿到分页的信息,输出语句,最后再把ThreadLocal中的东西清除掉。

2. 使用注意事项

PageHelper使用了ThreadLocal保存分页参数,分页参数和线程是绑定的。因此我们需要保证PageHelper 的startPage调用后紧跟 MyBatis 查询方法,这就是安全的。因为 PageHelper 在 finally 代码段中自动清除了 ThreadLocal 存储的对象。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值