PageHelper 是一款好用的开源免费的 Mybatis 第三方物理分页插件,
支持多
种数据库:Oracle,MySql,MariaDB,SQLite,DB2,PostgreSQL,SqlServer 等
1、在pom.xml中引入依赖
com.github.pagehelper
pagehelper-spring-boot-starter
1.2.3
2、在application.properties配置pagehelper的属性
#pagehelper分页插件配置
pagehelper.helperDialect=mysql
#为true时,当前页大于总页数时,会返回最后一页,为false时,有数据就返回,没数据则为空
pagehelper.reasonable=true
pagehelper.supportMethodsArguments=true
pagehelper.params=count=countSql
3、service接口层
package com.example.demo.service;
import com.example.demo.es.Article;
import com.github.pagehelper.PageInfo;
public interface IArticleService {
PageInfo getAllArticle(Integer page, Integer pageSize);
}
4、service实现层
package com.example.demo.service.impl;
import com.example.demo.es.Article;
import com.example.demo.mapper.ArticleMapper;
import com.example.demo.service.IArticleService;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.List;
@Data
@Slf4j
@Component
public class ArticleService implements IArticleService {
@Autowired
ArticleMapper articleMapper;
public PageInfo getAllArticle(Integer page, Integer pageSize) {
PageInfo pageInfo = null;
try{
PageHelper.startPage(page,pageSize);
List articleList = articleMapper.getAllArticle();
pageInfo = new PageInfo(articleList);
}catch(Exception e){
e.printStackTrace();
}
return pageInfo;
}
}
其他的多不说,自行发挥,重点就是这几个。
结果:
{
"pageNum":1,
"pageSize":100,
"size":10,
"startRow":1,
"endRow":10,
"total":10,
"pages":1,
"list":[
{
"titleId":1,
"title":"平凡的世界",
"author":"路遥",
"content":"一个穷困的农村青年,然而他又是有知识的农村青年。务实,勇于听从精神的召唤。无论是吃着高粱面馍、喝着剩菜汤的高中生活,还是下地务农的农民生活,甚至走出土地后的打工生活,孙少平身上都昂扬着精神的高傲、挥洒着灵魂的矜持。物质的匮乏和精神的充盈让孙少平的生活始终五味杂陈。而生活考验的不断加剧和知识视野的不断拓展,也造就了孙少平保尔般的工作热情和圣徒般的道德修养。面对歧视他忍辱负重,看到不平他拔刀相助,关键时刻不计前嫌等等,自身的物质穷困根本没有成为他道德修养的束缚,反倒映衬出他人格的完善。而他的爱情选择也显示了他的个性特征。面对高干子女、大学生田晓霞,他没有逃避,也没有感到自卑,他的精神高度足以和她站在一起。而最终他拒绝金秀的爱情回到惠英的身边,同样是他圣徒精神的延伸,强大的责任意识和担当感促成了他的选择。",
"publishDate":"1986-12-01"
},
{
"titleId":2,
"title":"论语",
"author":"孔子",
"content":"《论语》是儒家的经典之作,是一部以记言为主的语录体散文集。早在春秋后期孔子设坛讲学时期,其主体内容就已初始创成;孔子去世以后,他的弟子和再传弟子代代传授他的言论,并逐渐将这些口头记诵的语录言行记录下来,因此称为“论”;《论语》主要记载孔子及其弟子的言行,因此称为“语”。清朝赵翼解释说:“语者,圣人之语言,论者,诸儒之讨论也。”其实,“论”又有纂的意思,所谓《论语》,是指将孔子及其弟子的言行记载下来编纂成书。现存《论语》20篇,492章,其中记录孔子与弟子及时人谈论之语约444章,记孔门弟子相互谈论之语48章。",
"publishDate":"2018-09-27"
},
{
"titleId":3,
"title":"围城",
"author":"钱钟书",
"content":"《围城》包含着深厚的思想意蕴。一是社会批判层面。作品通过主人公方鸿渐的人生历程,对20世纪三、四十年代国统区的国政时弊和众生相进行了抨击,包括对上海洋化商埠的腐败堕落、对内地农村的落后闭塞,对教育界、知识界的腐败现象的讥讽。二是文化批判的层面。这一点,主要是通过对“新儒林”的描写和对一批归国留学生或高级知识分子形象的塑造来实现的。《围城》中的人物,大多患有崇洋症,但骨子里还是传统文化起主导作用。方鸿渐是“新儒林”中尚有正义感的人物,他的出国留洋,目的是“光耀门楣”,好比前清时代花钱捐个官。他的懦弱的性格,悲剧的结局,正是传统文化所致。李梅亭、韩学愈、高松年等人的庸俗、卑琐、无聊、虚荣、争斗等劣根性,也是传统文化影响的产物。封建遗老方遯翁不用说了,就是于柔顺之下深藏心机的孙柔嘉,在她的身上仍然可以看到旧式女性的面孔。作品通过这些人物病态性格的剖析,对中国传统文化进行了深刻的反思和批判。第三个层面则是对人生、对现代人命运的哲理思考,深入到人本的形而上的层次,诸如对人的基本生存处境和人生的根本意义的探讨,对人的基本根性和人际间的基本关系的探讨。钱钟书夫人杨绛在电视连续剧《围城》片头上写道:“《围城》的主要内涵是围在城里的人想逃出来,城外的人想冲进去。对婚姻也罢,职业也罢,人生的愿望大都如此。”小说中也多次点明了”围城“的含义。它告诉人们,人生处处是“围城”,结而离,离而结,没有了局,存在着永恒的困惑和困境。作家在围城中所提出的问题,涉及到整个现代文明的危机和现代人生的困境这个带有普遍意义的问题。",
"publishDate":"1947-12-01"
},
{
"titleId":4,
"title":"年轮",
"author":"梁晓声",
"content":"《年轮》讲述的是一群刚刚步入青年期的年轻人在那个特殊的时代,响应国家的号召上山下乡,那时他们情感纯洁,没有杂念,应直到文革结束时期,他们为了各自的梦想先后以不同的方式回城,没有联系,十年之后他们重逢却有着各自的命运,以前的梦想离现实远去,他们也面临着社会对他们的选择。有责备,有后悔,有不舍,有无奈。……有一个十年过去,他们已人到中年,很多事情都能够释怀了。才发现其实他们彼此从未放弃过对方。",
"publishDate":"1994-01-01"
},
{
"titleId":5,
"title":"穆斯林的葬礼",
"author":"霍达",
"content":"古都京华老字号玉器行“奇珍斋”的梁亦清,原是回族底层的琢玉艺人,他家有两个女儿,长女君璧和次女冰玉。本书主人公韩子奇因摔碎了梁亦清做的碗而决定留下当学徒。师徒两人正为一件订货劳作,这是专做洋人买卖的“汇远斋”定做的“郑和航海船”。郑和是回族的英雄,他们决心做好这件光耀民族精神的作品,三年的精雕细刻将在中秋佳节完成。不料梁亦清突然晕倒在转动着的玉坨上,宝船被毁,人也丧命。为了抵债,梁家将奇珍斋转给落井下石的汇远斋老板,韩子奇则为了报仇潜伏到“汇远斋”当了学徒。",
"publishDate":"1988-12-01"
},
{
"titleId":6,
"title":"追风筝的人",
"author":"卡勒德·胡赛尼",
"content":"《追风筝的人》清新自然,以新写实的笔法,诉说着温情与残酷,美丽与苦难,它不仅仅展示了一个人的心灵成长史,也展示了一个民族的灵魂史,一个国家的苦难史。这部小说流畅自然,就像一条清澈的河流,却奔腾着人性的激情,蕴含着阿富汗斯坦这个古老国家丰富的灵魂,激荡着善与恶的潜流撞击。因为这部书,让世界了解了一个遭受战火蹂躏的、默默无闻的阿富汗斯坦人,这才是文学的魅力,也是这部小说的艺术魅力。但是这部小说不仅如此,它之所以能够吸引不同民族、国家的读者,撼动读者内心纤细的情感,是因为它讨论了关于人性和人性的拯救问题,这是现代人类面临的共同话题。其实,人性的救赎是这部小说的核心价值。",
"publishDate":"2003-12-01"
},
{
"titleId":7,
"title":"复活",
"author":"列夫·托尔斯泰",
"content":"《复活》是托尔斯泰最后一部长篇小说,是作家一生探索和思想的总结,被誉为俄国批判现实主义发展的高峰。小说通过玛丝洛娃的苦难遭遇和聂赫留朵夫的上诉经过,广泛而深刻地抨击了法庭、监狱、官僚机关的腐败、黑暗,揭露了封建统治阶级骄奢淫逸的生活和反动官吏的残暴昏庸、毫无人性,撕下了官办教会的伪善面纱,反映了农村的破产和农民的极端贫困,勾画了一幅已经走到崩溃边缘的农奴制俄国的社会图画",
"publishDate":"1899-12-01"
},
{
"titleId":8,
"title":"钢铁是怎样炼成的",
"author":"奥斯特洛夫斯基",
"content":"《钢铁是怎样炼成的》这部史诗般的英雄传记小说塑造了保尔·柯察金执著于信念而坚韧不拔的崇高人格,其形象超越时空,超越国界,产生了世界性的影响,震动着数代人的心弦。仅在前苏联,这部作品就以61种文字印了600多次,总数达3000多万册。",
"publishDate":"2011-12-01"
},
{
"titleId":9,
"title":"时间简史",
"author":"斯蒂芬·威廉·霍金",
"content":"在这部书中,霍金带领读者遨游外层空间奇异领域,对遥远星系、黑洞、夸克、“带味”粒子和“自旋”粒子、反物质、“时间箭头”等进行了深入浅出的介绍,并对宇宙是什么样的、空间和时间以及相对论等古老问题做了阐述,使读者初步了解狭义相对论以及时间、宇宙的起源等宇宙学的奥妙。 《时间简史》的主要内容可概括为以下几个方面: 1.时间起始点——宇宙大爆炸奇点。宇宙是不断膨胀着的,它在最初应该收缩为一点,这一时刻被称为宇宙大爆炸时刻。宇宙在这一点的密度无穷大,这一点即为数学上所称的奇点。 2.时间终结——黑洞。恒星由于引力作用会不断收缩,会形成一个“黑洞”。黑洞表面引力很强,时间会在此终止。 3.上帝是如何启动宇宙的?——宇宙的起源和命运。一种是以人择原理来解释的叫做紊乱边界条件的宇宙起源;另一种解释称为“暴涨模型”,它认为宇宙在开始的一瞬间是以加速度膨胀,在远小于1秒的时间里宇宙的半径增大了100万亿亿亿倍。 4.物理学的统一——终极理论。人类在寻求建立一个适用于宇宙中每一事件的、完整的、协调的统一理论,在这理论中不需要选取特定的常数去符合事实。",
"publishDate":"1988-12-01"
},
{
"titleId":10,
"title":"百年孤独",
"author":"加西亚·马尔克斯",
"content":"作品描写了布恩迪亚家族七代人的传奇故事,以及加勒比海沿岸小镇马孔多的百年兴衰,反映了拉丁美洲一个世纪以来风云变幻的历史。作品融入神话传说、民间故事、宗教典故等神秘因素,巧妙地糅合了现实与虚幻,展现出一个瑰丽的想象世界,成为20世纪重要的经典文学巨著之一。 作品描写了布恩迪亚家族七代人的传奇故事,以及加勒比海沿岸小镇马孔多的百年兴衰,反映了拉丁美洲一个世纪以来风云变幻的历史。作品融入神话传说、民间故事、宗教典故等神秘因素,巧妙地糅合了现实与虚幻,展现出一个瑰丽的想象世界,成为20世纪重要的经典文学巨著之一。 作品描写了布恩迪亚家族七代人的传奇故事,以及加勒比海沿岸小镇马孔多的百年兴衰,反映了拉丁美洲一个世纪以来风云变幻的历史。作品融入神话传说、民间故事、宗教典故等神秘因素,巧妙地糅合了现实与虚幻,展现出一个瑰丽的想象世界,成为20世纪重要的经典文学巨著之一。 作品描写了布恩迪亚家族七代人的传奇故事,以及加勒比海沿岸小镇马孔多的百年兴衰,反映了拉丁美洲一个世纪以来风云变幻的历史。作品融入神话传说、民间故事、宗教典故等神秘因素,巧妙地糅合了现实与虚幻,展现出一个瑰丽的想象世界,成为20世纪重要的经典文学巨著之一。 ",
"publishDate":"1967-12-04"
}
],
"prePage":0,
"nextPage":0,
"isFirstPage":true,
"isLastPage":true,
"hasPreviousPage":false,
"hasNextPage":false,
"navigatePages":8,
"navigatepageNums":[
1
],
"navigateFirstPage":1,
"navigateLastPage":1,
"firstPage":1,
"lastPage":1
}
PageHelper中默认的PageInfo属性介绍:
//当前页
private int pageNum;
//每页的数量
private int pageSize;
//当前页的数量
private int size;
//当前页面第一个元素在数据库中的行号
private int startRow;
//当前页面最后一个元素在数据库中的行号
private int endRow;
//总记录数
private long total;
//总页数
private int pages;
//结果集
private List list;
//第一页
private int firstPage;
//前一页
private int prePage;
//是否为第一页
private boolean isFirstPage;
//是否为最后一页
private boolean isLastPage;
//是否有前一页
private boolean hasPreviousPage;
//是否有下一页
private boolean hasNextPage;
//导航页码数
private int navigatePages;
//所有导航页号
private int[] navigatepageNums;