springboot分页插件PageHelper的配置和使⽤⽅法前⾔
在web开发过程中涉及到表格时,例如dataTable,就会产⽣分页的需求,通常我们将分页⽅式分为两种:前端分页和后端分页。
1)前端分页
⼀次性请求数据表格中的所有记录(ajax),然后在前端缓存并且计算count和分页逻辑,⼀般前端组件(例如dataTable)会提供分页动作。
特点是:简单,很适合⼩规模的web平台;当数据量⼤的时候会产⽣性能问题,在查询和⽹络传输的时间会很长。
2)后端分页
在ajax请求中指定页码(pageNum)和每页的⼤⼩(pageSize),后端查询出当页的数据返回,前端只负责渲染。
特点是:复杂⼀些;性能瓶颈在MySQL的查询性能,这个当然可以调优解决。⼀般来说,web开发使⽤的是这种⽅式。
我们说的也是后端分页。
MySQL对分页的⽀持
简单来说MySQL对分页的⽀持是通过limit⼦句。请看下⾯的例⼦。
limit关键字的⽤法是
分页查询插件LIMIT [offset,] rows
offset是相对于⾸⾏的偏移量(⾸⾏是0),rows是返回条数。
# 每页10条记录,取第⼀页,返回的是前10条记录
select * from tableA limit 0,10;
# 每页10条记录,取第⼆页,返回的是第11条记录,到第20条记录,
select * from tableA limit 10,10;
这⾥提⼀嘴的是,MySQL在处理分页的时候是这样的:
limit 1000,10 - 过滤出1010条数据,然后丢弃前1000条,保留10条。当偏移量⼤的时候,性能会有所下降。
limit 100000,10 - 会过滤10w+10条数据,然后丢弃前10w条。如果在分页中发现了性能问题,可以根据这个思路调优。
Mybatis分页插件PageHelper
在使⽤Java Spring开发的时候,Mybatis算是对数据库操作的利器了。不过在处理分页的时候,Mybatis并没有什么特别的⽅法,⼀般需要⾃⼰去写limit⼦句实现,成本较⾼。好在有个PageHelper插件。
1、POM依赖
PageHelper的依赖如下。(这⾥有个坑,springboot引⼊的依赖和spring的依赖不⼀样)
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>1.2.13</version>
</dependency>
2、l 添加配置
# 分页插件
pagehelper:
helperDialect: mysql
reasonable: true
supportMethodsArguments: true
params: count=countSql
3.Controller中实现分页
@ApiOperation(value = "获取电池采集历史集合",httpMethod = "GET", notes = "获取电池采集历史集合") @ResponseBody
@RequestMapping(value = {"/Pagelist"}, method = RequestMethod.GET)
public Result getPageList(
@ApiParam(value = "mac地址", required = true) String MAC,
@ApiParam(value = "电池编号", required = true) Integer Number,
@ApiParam(value = "开始时间", required = true) String starTime,
@ApiParam(value = "结束时间", required = true) String endTime,
@ApiParam(value = "分页索引", required = true) Integer pageIndex,
@ApiParam(value = "分页条数", required = true) Integer pageSize) {
try {
PageHelper.startPage(pageIndex, pageSize);
List<batteryinfoEntity> list = All(MAC,Number,starTime,endTime,null, null);
PageInfo<batteryinfoEntity> pageInfo = new PageInfo<batteryinfoEntity>(list);
//分页列表,总数
return Result.List(),(Total());
} catch (Exception ex) {
System.out.Message());
return Result.failure(ResponseCode.ERROR_999, ResponseMsg.QUERY_ERROR);
}
}
说明:All()⽅法就是正常的按业务查询,PageHelper⾃动就注⼊分页。
通过调试可以看到,sql ⾃动添加了 limit
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论