前言

以前在写mysql分页的时候,都是将分页参数传给sql语句,也就是手动设置page,size这些,利用limit语句来进行的。这样有点麻烦,mybatis提供了分页插件pagehelper,下面使用pagehelper进行简单的分页。

1、PageHelper介绍

PageHelper是mybatis的通用分页插件,通过mybatis的拦截器实现分页功能,拦截sql查询请求,添加分页语句,最终实现分页查询功能。

2、分页原理

在调用dao的service方法中设置分页参数:PageHelper.startPage(page, size),分页参数会设置在ThreadLocal中。PageHelper 在mybatis执行sql前进行拦截,从ThreadLocal取出分页参数,修改当前执行的sql语句,添加分页sql,最后执行添加了分页sql的sql语句,实现分页查询。

3、PageHelper使用

(1)pom依赖

     <!-- pageHelper分页 --><dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId><version>1.2.11</version></dependency>

(2)yml配置

需要配置方言,mysql或者oracle这些,因为不同数据库分页的SQL语句不太一样。

##pageHelper分页插件配置
pagehelper:##方言配置为mysql数据库helper-dialect: mysql

(3)pojo

ackage com.ycz.domain.book;import java.util.Date;import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;import lombok.Getter;
import lombok.Setter;@Entity
@Table(name = "book_info")
public class BookInfo {@Id@Column(name = "book_id")@Getter@Setterprivate int bookId;@Column(name = "name")@Getter@Setter   private String name;@Column(name = "author")@Getter@Setter  private String author;@Column(name = "publish")@Getter@Setter  private String publish;@Column(name = "ISBN")@Getter@Setter  private String ISBN;@Column(name = "introduction")@Getter@Setter  private String introduction;@Column(name = "language")@Getter@Setter  private String language;@Column(name = "price")@Getter@Setter  private double price;@Column(name = "pub_date")@Getter@Setter  private Date pubDate;@Column(name = "class_id")@Getter@Setter  private int classId;@Column(name = "number")@Getter@Setter  private int number;@Column(name = "add_time")@Getter@Setter  private String addTime;}

(4)mapper接口

package com.ycz.swagger.dao;import org.apache.ibatis.annotations.Mapper;import com.github.pagehelper.Page;
import com.ycz.domain.book.BookInfo;@Mapper
public interface BookInfoMapper {//分页查询Page<BookInfo> findBooksPaged();}

这里返回类型是PageHelper提供的分页Page对象,而且这个接口也没有传入分页参数page,size这些。

(5)xml映射文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.ycz.swagger.dao.BookInfoMapper">  <!-- 分页查询 --><select id="findBooksPaged" resultType="com.ycz.domain.book.BookInfo">select * from book_info</select></mapper>

同样这里的SQL语句也没有使用limit语句,最终会生成一个带分页查询的SQL语句。

(6)api

@Api(value = "书籍管理",description = "提供书籍信息的增删改查",tags = {"书籍管理"})
public interface BookControllerApi {QueryResponseResult<BookInfo> findBooksPaged(int page,int size);}

(7)Service

@Service
public class BookService {@AutowiredBookInfoMapper bookInfoMapper;public QueryResponseResult<BookInfo> findBooksPaged(int page, int size) {if(page <= 0) {page = 1;}if(size <= 5) {size = 5;}//开始分页PageHelper.startPage(page, size);//获取分页对象Page<BookInfo> pg = bookInfoMapper.findBooksPaged();//从分页对象中取出查询列表List<BookInfo> books = pg.getResult();//获取条数目long total = pg.getTotal();//查询对象QueryResult<BookInfo> queryResult = new QueryResult<BookInfo>();//封装参数queryResult.setTotal(total);queryResult.setList(books);return new QueryResponseResult<>(TestCode.SUCCESS, queryResult);}}

获取Page分页对象,再从分页对象中获取查询列表。

(8)controller

@RestController
@RequestMapping("/book")
public class BookController implements BookControllerApi{@AutowiredBookService bookService;@Override@GetMapping("/list/{page}/{size}")public QueryResponseResult<BookInfo> findBooksPaged(@PathVariable("page") int page, @PathVariable("size") int size) {return bookService.findBooksPaged(page,size);}}

(9)测试
使用swagger进行测试:

返回结果:

{"success": true,"code": 10000,"message": "操作成功!","queryResult": {"list": [{"bookId": 0,"name": "九型人格","author": "海伦·帕尔默","publish": "华夏出版社","introduction": "九型人格(Enneagram),又名性格型态学、九种性格。是婴儿时期人身上的九种气质,包括活跃程度;规律性;主动性;适应性;感兴趣的范围;反应的强度;心景的素质;分心程度;专注力范围/持久性。它是一个近年来倍受美国斯坦福等国际著名大学MBA学员推崇并成为现今最热门的课程之一,近十几年来已风行欧美学术界及工商界。全球500强企业的管理阶层均有研习九型性格,并以此培训员工。","language": "中文","price": 45,"pubDate": null,"classId": 0,"number": 10,"addTime": null,"isbn": "9787508086149"},{"bookId": 0,"name": "三十六计","author": "佚名","publish": "北京联合出版公司","introduction": "《三十六计》或称三十六策,是指中国古代三十六个兵法策略,语源于南北朝,成书于明清。它是根据中国古代军事思想和丰富的斗争经验总结而成的兵书,是中华民族悠久非物质文化遗产之一。","language": "中文","price": 12,"pubDate": null,"classId": 0,"number": 9,"addTime": null,"isbn": "9787550243569"},{"bookId": 0,"name": "传习录","author": "王阳明","publish": "新华书店出版社","introduction": "《传习录》是哲学著作,作者是中国明代哲学家、宋明理学中心学一派的代表人物王守仁(字伯安),世称阳明先生。此书记载了他的语录和论学书信。传习一词源出自《论语》中的传不习乎一语。\n                    ","language": "中文","price": 32,"pubDate": null,"classId": 0,"number": 4,"addTime": null,"isbn": "9878875775657"},{"bookId": 0,"name": "何以笙箫默","author": "顾漫 sdf 的身份","publish": "朝华出版社","introduction": "一段年少时的爱恋,牵出一生的纠缠。大学时代的赵默笙阳光灿烂,对法学系大才子何以琛一见倾心,开朗直率的她拔足倒追,终于使才气出众的他为她停留驻足。然而,不善表达的他终于使她在一次伤心之下远走他乡……","language": "中文","price": 15,"pubDate": null,"classId": 0,"number": 10,"addTime": null,"isbn": "9787505414709"},{"bookId": 0,"name": "人类简史","author": "[以色列] 尤瓦尔·赫拉利 ","publish": "中信出版社","introduction": "十万年前,地球上至少有六种不同的人\r\n但今日,世界舞台为什么只剩下了我们自己?\r\n从只能啃食虎狼吃剩的残骨的猿人,到跃居食物链顶端的智人,\r\n从雪维洞穴壁上的原始人手印,到阿姆斯壮踩上月球的脚印,\r\n从认知革命、农业革命,到科学革命、生物科技革命,\r\n我们如何登上世界舞台成为万物之灵的?\r\n从公元前1776年的《汉摩拉比法典》,到1776年的美国独立宣言,\r\n从帝国主义、资本主义,到自由主义、消费主义,\r\n从兽欲,到物欲,从兽性、人性,到神性,\r\n我们了解自己吗?我们过得更快乐吗?\r\n我们究竟希望自己得到什么、变成什么?","language": "英文","price": 68,"pubDate": null,"classId": 0,"number": 20,"addTime": null,"isbn": "9787508647357"},{"bookId": 0,"name": "明朝那些事儿(1-9)","author": "当年明月 ","publish": "中国海关出版社","introduction": "《明朝那些事儿》讲述从1344年到1644年,明朝三百年间的历史。作品以史料为基础,以年代和具体人物为主线,运用小说的笔法,对明朝十七帝和其他王公权贵和小人物的命运进行全景展示,尤其对官场政治、战争、帝王心术着墨最多。作品也是一部明朝政治经济制度、人伦道德的演义。","language": "中文","price": 358.2,"pubDate": null,"classId": 0,"number": 20,"addTime": null,"isbn": "9787801656087"},{"bookId": 0,"name": "经济学原理(上下)","author": "[美] 曼昆 ","publish": "机械工业出版社","introduction": "此《经济学原理》的第3版把较多篇幅用于应用与政策,较少篇幅用于正规的经济理论。书中主要从供给与需求、企业行为与消费者选择理论、长期经济增长与短期经济波动以及宏观经济政策等角度深入浅出地剖析了经济学家们的世界观。","language": "英文","price": 88,"pubDate": null,"classId": 0,"number": 18,"addTime": null,"isbn": "9787111126768"},{"bookId": 0,"name": "方向","author": "马克-安托万·马修 ","publish": "后浪丨北京联合出版公司","introduction": "《方向》即便在马修的作品中也算得最独特的:不着一字,尽得风流。原作本无一字,标题只是一个→,出版时才加了个书名Sens——既可以指“方向”,也可以指“意义”。 《方向》没有“字”,但有自己的语言——请读者在尽情释放想象力和独立思考之余,破解作者的密码,听听作者对荒诞的看法。","language": "中文","price": 99.8,"pubDate": null,"classId": 0,"number": 12,"addTime": null,"isbn": "9787020125265"},{"bookId": 0,"name": "画的秘密","author": "马克-安托万·马修 ","publish": "北京联合出版公司·后浪出版公司","introduction": "一本关于友情的疗伤图像小说,直击人内心最为隐秘的情感。 一部追寻艺术的纸上悬疑电影,揭示命运宇宙中奇诡的真相。 ★ 《画的秘密》荣获欧洲第二大漫画节“瑞士谢尔漫画节最佳作品奖”。 作者曾两度夺得安古兰国际漫画节重要奖项。 ★ 《画的秘密》是一部罕见的、结合了拼贴、镜像、3D等叙事手法的实验型漫画作品。作者巧妙地调度光线、纬度、时间、记忆,在一个悬念重重又温情治愈的故事中,注入了一个有关命运的哲学议题。","language": "中文","price": 60,"pubDate": null,"classId": 0,"number": 21,"addTime": null,"isbn": "9787550265608"},{"bookId": 0,"name": "造彩虹的人","author": "东野圭吾 ","publish": "北京十月文艺出版社","introduction": "其实每个人身上都会发光,但只有纯粹渴求光芒的人才能看到。 从那一刻起,人生会发生奇妙的转折。功一高中退学后无所事事,加入暴走族消极度日;政史备战高考却无法集中精神,几近崩溃;辉美因家庭不和对生活失去勇气,决定自杀。面对糟糕的人生,他们无所适从,直到一天夜里,一道如同彩虹的光闯进视野。 凝视着那道光,原本几乎要耗尽的气力,源源不断地涌了出来。一切又开始充满希望。打起精神来,不能输。到这儿来呀,快来呀——那道光低声呼唤着。 他们追逐着呼唤,到达一座楼顶,看到一个人正用七彩绚烂的光束演奏出奇妙的旋律。 他们没想到,这一晚看到的彩虹,会让自己的人生彻底转...","language": "中文","price": 39.5,"pubDate": null,"classId": 0,"number": 12,"addTime": null,"isbn": "9787530216859"}],"total": 16}
}

表中一共16条数据,返回的是第一页的数据,可以看到,其实查询了全部记录,然后根据设置的分页参数来决定返回哪一页的数据。

4、小结

这里只是记录了一下PageHelper的简单使用,官方做的这个插件其实功能很强大,以后继续深入了解。

PageHelper分页插件的简单使用相关推荐

  1. springboot2.0.5集成mybatis(PageHelper分页插件、generator插件使用)

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/zab635590867/article ...

  2. Springboot 系列(十二)使用 Mybatis 集成 pagehelper 分页插件和 mapper 插件

    前言 在 Springboot 系列文章第十一篇里(使用 Mybatis(自动生成插件) 访问数据库),实验了 Springboot 结合 Mybatis 以及 Mybatis-generator 生 ...

  3. Spring Boot集成pagehelper分页插件

    Spring Boot集成pagehelper分页插件 1.在pom.xml中添加pagehelper依赖 2.修改配置文件 3.修改Controller里面的查询方法 4.返回分页信息 1. 修改U ...

  4. MyBatis入门(九)注解开发(下) PageHelper分页插件

    目录 一.二级缓存 二.一对一关联查询 三.一对多关联查询 四.注解开发与映射文件开发的对比 五.PageHelper分页插件 一.二级缓存 MyBatis默认开启一级缓存,接下来我们学习如何在注解开 ...

  5. spring boot整合mybatis+通用mapper+pagehelper分页插件

    spring boot整合mybatis+通用mapper+pagehelper分页插件 pom依赖 <?xml version="1.0" encoding="U ...

  6. SpringBoot入门篇--整合mybatis+generator自动生成代码+druid连接池+PageHelper分页插件

    我们这一一篇博客讲的是如何整合Springboot和Mybatis框架,然后使用generator自动生成mapper,pojo等文件.然后再使用阿里巴巴提供的开源连接池druid,这个连接池的好处我 ...

  7. SpringBoot中使用Mybatis-plus整合PageHelper分页插件踩坑

    今天使用SpringBoot中使用Mybatis-plus整PageHelper分页插件把我给坑惨了,我报错的pom.xml配置如下,其它的依赖就忽略掉了 <!--pagehelper --&g ...

  8. PageHelper 分页插件只用Page、不用PageInfo 的写法

    PageHelper 分页插件,学到的写法是得到Page 对象后再转成PageInfo 对象,但Page 是ArrayList 的子类,里面包含了数据列表和分页信息,为什么不能直接用Page 对象做分 ...

  9. PageHelper 分页插件使用总结

    一个简洁的博客网站:http://lss-coding.top,欢迎大家来访 学习娱乐导航页:http://miss123.top/ 一.认识 PageHelper **官网:**https://pa ...

  10. 使用PageHelper分页插件手动分页,其他查询数据出现串连问题

    在一个需求中,需要在代码中进行分页,于是就选用了PageHelper分页插件进行分页,刚开始的时候忘记了PageHelper分页插件的用法于是我就用: // 设置分页查询条件 PageHelper.s ...

最新文章

  1. 如何判断 cxgrid 双击了哪一列_唐卡的价值主要体现在哪 如何判断唐卡的价值
  2. 关于为何推崇交易规范排序(CTOR)的原因
  3. 45个纯 CSS 实现的精美边框效果【附演示和源码】【上篇】
  4. Java8中的Mapreduce
  5. share extension 不显示_这几项超好用的云开发扩展能力,别说你还不知道!
  6. tp连接mysql mysql_thinkphp学习简易教程(二) thinkphp连接读取MySQL数据库
  7. .NET 5 和 C#9 /F#5 一起到来, 向实现 .NET 统一迈出了一大步
  8. 【转】Magento 2数据库EAV模型结构
  9. 谷歌大脑联手Hinton提出SimCLR新框架,疯狂提升自监督学习性能
  10. linux 源码编译安装apache
  11. 如何区分USB接口类型
  12. Android第二十课 解决Logcat无法输出调试信息
  13. ssm校园在线点餐系统源码(含数据库)
  14. 枕头里面加进这些小宝贝能治高血压!快告知你父母~
  15. P1460 [USACO2.1]健康的荷斯坦奶牛 Healthy Holsteins
  16. 互联网公司招聘--网易--网易云音乐程序员--2017年笔试题
  17. java贪心,java实现贪心算法
  18. TMOS系统之NATS 和 SNAT
  19. loadrunner使用web_add_header添加HTTP信息头(比如Content-Type,token等)和使用
  20. 雨课堂知识点总结(十一)

热门文章

  1. 卓有成效的管理者(笔记)——我能贡献什么
  2. Active Directory的DirectoryEntry与DirectorySearcher初识及Filter语法
  3. 含泪整理最优质相机 单反 摄影3dm犀牛模型素材,你想要的这里都有
  4. HTML添加背景音乐代码
  5. 文件上传(FileUpload)
  6. 那些年我们感到不可思议的数据恢复
  7. picasa csdn_前5名:Picasa的开源替代品,SourceForge / Slashdot采访等
  8. 【零经验】游戏制作全流程攻略(Unity、个人开发、找工作)
  9. 宇视摄像头IP地址修改工具
  10. Adobe Creative Cloud 2022 (macOS、Windows) TNT 合集