PageHelper的使用

2022-04-28  本文已影响0人  万事俱备就差一个程序员了

PageHelper的使用

十八0618

我们的目标是星辰大海!

关注他

24 人赞同了该文章

PageHelper

pagehelper是mybatis的一个插件,其作用是更加方便地进行分页查询

分页查询的实现有两种方式

1:直接在sql中使用 limit子句 进行分页查询

limit关键字的用法是:LIMIT [offset,] rows

select * from tableA limit 5,5;

Ps1:offset是相对于首行的偏移量(首行是0),rows是返回条数

Ps2:mapper中可以传变量,即在实际使用的时候 “offset与rows”可以用变量替代

2:使用第三方库进行分页查询,如mybatis的插件pagehelper

使用PageHelper的好处是在实际项目开发中更方便

原因是:在项目中我们执行一个分页查询时,很多时候还会需要知道该查询的其他信息,如总数、每页数量、当前页数、上一页或下一页等等,这些信息如果每次都自己写的话就太麻烦了,而pagehelper能够帮助我们更方便地获取这些信息,大大方便了我们的开发效率。

PageHelper在SpringBoot中的使用

一:导入插件

1:pom.xml中导入依赖

<dependency>

            <groupId>com.github.pagehelper</groupId>

            <artifactId>pagehelper-spring-boot-starter</artifactId>

            <version>1.3.0</version>

        </dependency>

注意导入的依赖是spring版本的而不是其独立版本,否则pagehelper将不起作用

2:在springboot配置文件(applicable.yml)中声明插件

#pagehelper分页插件配置

pagehelper:

  helperDialect: mysql

  reasonable: true

  supportMethodsArguments: true

  params: count=countSql

二:在业务代码中使用

1:UserMapper

@Repository@MapperpublicinterfaceUserMapper{publicList<User>selectAll();}

2:UserMapper.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"><mappernamespace="com.springboot.springboot_mybatis.mapper.UserMapper"><selectid="selectAll"resultType="User">select * from user</select></mapper>

优点:不需要使用limit

3:实体类

4:service层

5:service实现类

@ServicepublicclassQueryUser2implementsQuery2{@AutowiredUserMapperuserMapper;@OverridepublicList<User>selectAll(intpageNum,intpageSize){PageHelper.startPage(pageNum,pageSize);List<User>users=userMapper.selectAll();PageInfo<User>pageInfo=newPageInfo<>(users);returnpageInfo.getList();}}

注意:只有紧跟着PageHelper.startPage(pageNum,pageSize)的sql语句才被pagehelper起作用

再次注意:经过再次验证,上面这句话不是扯淡

6:control类

@RestControllerpublicclasscontroller3{@AutowiredQuery2query2;@GetMapping("/selectAll")publicList<User>selectAll(@Param("pageNum")intpageNum,@Param("pageSize")intpageSize){List<User>users=query2.selectAll(pageNum,pageSize);returnusers;}}

使用中遇到的问题及tips:

1:在使用时pagehelper不起作用

注意pom.xml导入的依赖应该是spring版本的而不是其独立的版本

2:注意:只有紧跟着PageHelper.startPage()的sql语句才被pagehelper起作用

@ServicepublicclassQueryUser2implementsQuery2{@AutowiredUserMapperuserMapper;@OverridepublicList<User>selectAll(intpageNum,intpageSize){PageHelper.startPage(pageNum,pageSize);List<User>users=userMapper.selectAll();System.out.println(users);List<User>users1=userMapper.selectAll();System.out.println(users1);PageInfo<User>pageInfo=newPageInfo<>(users);returnpageInfo.getList();}}

控制台的输出

Page{count=true, pageNum=2, pageSize=2, startRow=2, endRow=4, total=8, pages=4, reasonable=true, pageSizeZero=false}[User{username='wangwu', age=20, address='fujian'}, User{username='dsdfds', age=23, address='eree'}]

[User{username='zhangsan', age=18, address='beijin'}, User{username='lisi', age=17, address='tianjing'}, User{username='wangwu', age=20, address='fujian'}, User{username='dsdfds', age=23, address='eree'}, User{username='dfwfd', age=22, address='dfdfd'}, User{username='dfdsettythg', age=45, address='ghgf'}, User{username='ggghgd', age=54, address='dfdf'}, User{username='dfdeg', age=21, address='fghgd'}]

可以看到只有紧跟着PageHelper.startPage()的那一句起了作用(注意,经过再次验证,这里不是扯淡,其原理可能是“PageHelper.startPage(pageNum,pageSize)在使用的时候启动了一个线程,致使了其能达到这个效果”)

注意,根据控制台可以得知,查询语句的返回结果“users”已经是分页之后的结果了,上面的例子没有写错;将users再传入PageInfo的目的是为了去除暂时用不到的其他信息,得到纯净的数据库信息:pageInfo.getList()

3:PageInfo的信息非常全,查询的个数、上一页、下一页等等信息都有,以上面springboot中的例子为例

PageInfo{pageNum=2, pageSize=2, size=2, startRow=3, endRow=4, total=8, pages=4, list=Page{count=true, pageNum=2, pageSize=2, startRow=2, endRow=4, total=8, pages=4, reasonable=true, pageSizeZero=false}[User{username='wangwu', age=20, address='fujian'}, User{username='dsdfds', age=23, address='eree'}], prePage=1, nextPage=3, isFirstPage=false, isLastPage=false, hasPreviousPage=true, hasNextPage=true, navigatePages=8, navigateFirstPage=1, navigateLastPage=4, navigatepageNums=[1, 2, 3, 4]}

发布于 2021-01-17 21:08

上一篇 下一篇

猜你喜欢

热点阅读