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


    1.sql语句物理分页

    1. @Select("select * from user limit #{curPage},#{pageSize}")
    2. List FindByPage (Integer curPage, Integer pageSize);

    mapper层

    1. @RequestMapping("page")
    2. public Map FindByPage(@RequestParam(value = "curPage",defaultValue = "1")Integer curPage
    3. ,@RequestParam(value = "pageSize",defaultValue = "5")Integer pageSize){
    4. // controller传页数 (curPage-1)*pageSize 的逻辑处理
    5. List userVOS = pageService.FindByPage((curPage-1)*pageSize, pageSize);
    6. HashMap map = new HashMap();
    7. if (userVOS != null){
    8. map.put("code",200);
    9. map.put("查询结果",userVOS);
    10. }else {
    11. map.put("code",404);
    12. map.put("查询结果","没有查到");
    13. }
    14. return map;
    15. }

    controller层

    2.使用myabtis插件(pagehelper)

    1. <dependency>
    2. <groupId>com.github.pagehelpergroupId>
    3. <artifactId>pagehelperartifactId>
    4. <version>5.0.3version>
    5. dependency>
    6. <dependency>
    7. <groupId>com.github.pagehelpergroupId>
    8. <artifactId>pagehelper-spring-boot-autoconfigureartifactId>
    9. <version>1.2.3version>
    10. dependency>
    11. <dependency>
    12. <groupId>com.github.pagehelpergroupId>
    13. <artifactId>pagehelper-spring-boot-starterartifactId>
    14. <version>1.2.3version>
    15. dependency>

    导入pom

    1. pagehelper.helper-dialect=mysql
    2. pagehelper.reasonable=true
    3. pagehelper.support-methods-arguments=true
    4. pagehelper.params=count=countSql
    5. pagehelper.page-size-zero=true
    6. spring.main.allow-circular-references=true

    application.properties文件中写入配置

    1. @Select("select * from user")
    2. List FindByMybatisPage();

    mapper层不用写Limit

    1. @RequestMapping("mybatispage")
    2. public Map FindByMybatisPage(@RequestParam(value = "curPage",defaultValue = "1")Integer curPage, @RequestParam(value = "pageSize",defaultValue = "5")Integer pageSize){
    3. HashMap map = new HashMap();
    4. List userVOS = pageService.FindByMybatisPage((curPage - 1) * pageSize, pageSize);
    5. if (userVOS != null){
    6. map.put("code",200);
    7. map.put("查询结果",userVOS);
    8. }else {
    9. map.put("code",404);
    10. map.put("查询结果","没有查到");
    11. }
    12. return map;
    13. }

    controller还是如正常写

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

    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 存储的对象。

  • 相关阅读:
    Vite配置Vue3 + TS项目工程实践
    【Unity】Xml的加密读取保存
    重新定义分析 - EventBridge 实时事件分析平台发布
    Qt 信号和槽
    HarmonyOS—@Observed装饰器和@ObjectLink嵌套类对象属性变化
    Pandas数据集的合并与连接merge()方法_Python数据分析与可视化
    typescript78-react支持ts的目录结构
    vue父页面与子组件之间的生命周期
    树的直径(dp和bfs求法)
    Java泛型:类型擦除
  • 原文地址:https://blog.csdn.net/m0_46628950/article/details/126213950