当前位置: 首页 > news >正文

SpringBoot(2.7.x)中使用PageHelper

如何在SpringBoot中使用PageHelper

  1. 先添加依赖
<dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId><version>1.2.12</version>
</dependency>
  1. SpringBoot 2.6.x及以上版本要开启循环依赖(除非你的SpringBoot版本兼容PageHelper版本)
# 这些代码写在application.yml中。
spring:datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://127.0.0.1:3306/learn_java?usessl=false&serverTimezone=Asia/Shanghaiusername: rootpassword: 123456main:allow-circular-references: true             # 下面是PageHelper的配置
pagehelper:helper-dialect: mysqlreasonable: falsedefault-count: true
  1. 然后在自定义的控制器中进行测试:
@Autowired
private BookService bookService;@GetMapping
public void selectAll(){PageHelper.startPage(1,6);  //第一个参数表示第几页,第二个参数表示每页含几条数据。List<Book> userList = bookService.selectAll();PageInfo pageInfo = new PageInfo(userList);System.out.println(pageInfo);
}

注意:

  • 分页插件只对PageHelper. startPage( pageNum, pageSize )后执行的的第一个select语句进行分页。
  • 上面的这段代码会返回第一页的数据,如果要返回第n页的数据,可以使用PageHelper. startPage( n, 6 )。

关于PageHelper的坑(官方文档中更详细)

如果你写出下面这样的代码,就是不安全的用法:

PageHelper.startPage(1, 10);
List<User> list;
if(param1 != null){list = userMapper.selectIf(param1);
} else {list = new ArrayList<User>();
}

这种情况下由于 param1 存在 null 的情况,就会导致 PageHelper 生产了一个分页参数,但是没有被消费,这个参数 就会一直保留在这个线程上。当这个线程再次被使用时,就可能导致不该分页的方法去消费这个分页参数,这就产生了莫名其妙的分页。

上面这个代码,应该写成下面这个样子:

List<User> list;
if(param1 != null){PageHelper.startPage(1, 10);list = userMapper.selectIf(param1);
} else {list = new ArrayList<User>();
}

这种写法就能保证安全。
如果你对此不放心,你可以手动清理ThreadLocal存储的分页参数,可以像下面这样使用:

List<User> list;
if(param1 != null){PageHelper.startPage(1, 10);try{list = userMapper.selectAll();} finally {PageHelper.clearPage();}
} else {list = new ArrayList<User>();
}

这么写很不好看,而且没有必要。

http://www.lryc.cn/news/108154.html

相关文章:

  • 【HarmonyOS】API9网络buffer图片加载
  • 【前端实习生备战秋招】—HTML 和 CSS面试题总结(二)
  • 操作系统知识点总结
  • (C++) 多线程之生产者消费者问题
  • 【C语言学习】逃逸字符(转义字符)
  • 开发手册|Java后端开发规范重点条目整理
  • c++11 标准模板(STL)(std::basic_ofstream)(二)
  • k8s概念-pv和pvc
  • python算法指南程序员经典,python算法教程pdf百度云
  • 微服务使用步骤
  • Ubuntu 23.04 作为系统盘的体验和使用感受
  • 百分点科技跻身中国智慧应急人工智能解决方案市场前三
  • vscode如何退出/切换 github 账号
  • maven发布到中央仓库
  • C#IEnumberable<>
  • Flink非对齐checkpoint原理(Flink Unaligned Checkpoint)
  • Linux crontab命令:循环执行定时任务(详解)
  • Linux系统jenkins+newman+postman持续集成环境搭建
  • flutter:Future、Stream、RxDart
  • Jenkins安装、配置、自动化构建前(nodejs)后端(maven)项目
  • 【网络基础进阶之路】设计网络划分的实战详解
  • 艺术二维码 API 申请及使用
  • JVM GC ROOT分析
  • 记一道有趣的sql题
  • C高级【day2】
  • 认识Webpack插件Plugin;CleanWebpackPlugin插件;HtmlWebpackPlugin;DefinePlugin;Mode模式
  • Redis 6.0的新特性:多线程、客户端缓存与安全
  • 【雕爷学编程】MicroPython动手做(37)——驱动LCD与图文显示3
  • 自然语言处理从入门到应用——LangChain:提示(Prompts)-[提示模板:序列化提示信息]
  • 【LinearAlgebra】Chapter 12 - Linear Algebra in Probability Statistics