Java——分页操作的实现

 

目录

前言

介绍

分页查询

详解

梳理

PageHelper

条件分页查询


前言

前一阵子学了springboot项目对数据库表的分页操作在前端的部署,一直没有整理它,最近看到一个java面试题问的是这个,发现自己已经忘的差不多了,写篇文章整理一下

介绍

 在一个前端页面中,如果有很多数据需要展示的情况下,一个页面放不下,就需要有分页操作,

既然数据多了,想要找某条数据,就需要根据条件查询数据的操作,本片文章只讲后端代码实现,会从三层架构入手,不讲述前端api对接


分页查询

详解

准备工作:

首先,在springboot项目中,我们的Controller层返回的结果都是我们人为定义的Result,前端接收到这个Result后,会对这个信息进行分析,然后做出相应的行为,因此我们想要实现分页操作,就需要将数据在数据库中先实现分页,然后查询要展现的页的信息交给Result返回即可,交给Result的数据,我们可以把它规定为一个类PageBean

这个类里边只有两个属性,一个total,代表一共有几条数据,一个rows,是List集合类型,代表这个页面的数据

注:这个类里边的属性,需要根据前端设计的页面去写,不是固定的,前端需要这个页面的什么信息,PageBean类里就应该有什么信息,因为在分页操作时,总会展示一共有几页,因此我设置了一个total,其实只有一个rows传递给Result再传递给前端就能够展现出数据了

有了这个类之后,我们下边就从三层架构拆分所有步骤

一:Controller层的实现

我们在上边已经梳理的很明白了,在Controller层,我们需要做的是

接收前端的信息,要查询第几页的数据,然后把这个数据响应出去

第一步:接收数据

需要知道,前端想要展现数据,得告诉后端,要展示第几页,每页展示几条数据,如果前端没有传递,我们就通过@RequestParam设置一个默认值

第二部:响应数据

不用管pageSize后边的字段,是我们最后要说的

调用Service层,返回一个PageBean类,然后将这个PageBean类作为信息,传递给Result,最后返回

二:Service层的实现

由Controller层可知,Service层需要一个page类,返回值是PageBean

这一层是逻辑实现层,我们知道,最后的Dao层对数据库进行操作时,想要实现分页,我们需要知道两个参数,每页几条数据(PageSize)和起始索引,因此我们在Service层需要根据page和pageSize求一下起始索引

三:Dao层的实现

在Mapper类中,对数据库进行操作

操作分为两步:

1:得到数据一共有几条

2:查询哪一页数据,返回这个页所有的数据

这就实现了分页操作


梳理

首先在Controller层接收前端的请求,知道要查询第几页page,每页几条数据pageSize,传递给Service层实现逻辑处理

然后在Service层,由page和pageSize计算出在数据库中查询的起始索引start,再把start和pageSize传递给Dao层

最后在Dao层,通过SQL语句的limit的用法,查询出来这页数据,返回给Service层,Service层再返回给Controller层,Cintroller层将这个页面信息,先交给Result,再由Result响应给前端

如果前端页面需要数据的总个数,在Page类中加上count属性,并在Service层和Dao层多一步求数据总个数的操作即可


PageHelper

 分页操作的Service层和Dao层的操作,其实是死的,因为,不管对哪个表进行分页操作,其实代码是相差不大的

步骤很固定,而实现又很繁琐,因此就有了PageHelper这个插件,来简化操作

首先要去下载这个插件

下面我说一下它简化了哪些步骤

1:在Dao层,不需要再求数据总个数,这个操作插件已经帮我们做了,而且在完成数据库分页操作时,也不需要再传递参数,直接查询即可,因为插件也已经帮我们做了

在Dao层,只需要写这简短的两句即可

2:在Service层

在Dao层我们只执行普通的查询语句,并且没有传递参数,PageHelper怎么知道我们每一页规定多少条数据,要返回第几页的数据呢

这些操作就需要在Service层中去实现

通过方法,PageHelper.startPage传递page和pageSize两个参数

这个方法底层就实现了计算起始索引,并知道了要查询第几页的数据,每一页有几条数据,相当于我们上边所写的三句

注意:通过PageHelper得到的结果,是PageHelper的封装类Page的集合(即List<Emp>其实是Page<Emp>)这就与我们Dao层方法返回值的类型不同了,因此,我们需要强转将其转换为Page,再通过里边的方法getTotal和getResult来分别获取数据总数和查询返回的结果


条件分页查询

 在上边我们已经实现了分页操作,下边我们再来讲一下,根据指定的条件查询数据的操作

其实就是在分页操作的基础上又添加一个功能而已

在Controller层中,我们此时不仅需要分离操作需要的参数,还需要用户输入的,查询的字段

注:如果是日期或时间,需要设置一下格式,然后传给Service层

在Service层,其实就在调用Dao层时,将要查询的字段,作为形参传递给Dao层,由Dao层对数据库根据这些字段进行查询操作

在Dao层,我们最好使用xml配置文件的方式,而不使用注解来处理

因为当用户没有使用查询操作时,这时要展现的就是全部数据,只有当使用时,才根据条件进行查询,因此这里通过标签使用动态SQL是最合适的


本文章为个人所感所想,请勿转载,如有问题,请及时与我讨论

——迷糊小白告

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值