IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> springboot使用PageHelper插件进行分页+模糊查询 -> 正文阅读

[Java知识库]springboot使用PageHelper插件进行分页+模糊查询

springboot使用PageHelper插件进行分页查询

最近我在学习利用分页插件来实现分页查询数据,今天给搭建分享一下PageHelper分页插件的学习

环境搭建

springboot(父依赖version 2.0.7)+maven
首先导入pom.xml依赖

<dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper-spring-boot-starter</artifactId>
            <version>1.4.1</version>
</dependency>
< --springboot必须依赖 -->

我这里是用的是1.4.1的版本,建议大家使用最新版本,因为使用旧版本可能会出现循环依赖的问题,还有就是旧版本可能与springboot版本冲突的问题(springboot2.6禁止循环依赖)
如下图使用1.3.0版本报错:
在这里插入图片描述
然后我去了解了一下循环依赖,大致就是说 假如bean A依赖于bean B时,bean B又依赖于bean A:bean A --> bean B --> bean A。当没有循环依赖时,bean A --> bean B --> bean C。
当Spring上下文加载所有bean时,它会尝试按照它们工作所需的顺序去创建bean。没有循环依赖时,Spring将创建bean C,然后创建bean B(并将bean C注入其中),然后创建bean A(并将bean B注入其中)。但当有循环依赖时,Spring无法决定应该首先创建哪个bean,因为它们彼此依赖。在这些情况下,Spring将在加载上下文时引发BeanCurrentlyInCreationException。
参考文章 : 什么是循环依赖以及解决方式

配置properties/yml文件

application.properties配置:

# pageHelper分页
# 指定数据库 默认自动检测数据库类型
pagehelper.helperDialect=mysql
# 是否启用分页合理化:当pageNum<1时,会自动查询第一页的数据,当pageNum>pages时,自动查询最后一页数据;
pagehelper.reasonable=true
# 默认值false,分页插件会从查询方法的参数值中,自动根据上面 params 配置的字段中取值,查找到合适的值时就会自动分页。
pagehelper.supportMethodsArguments=true
# 用于从对象中根据属性名取值
pagehelper.params=count: countSql

application.yml配置:

# 分页
# 指定数据库 默认自动检测数据库类型
pagehelper:
    helperDialect: mysql
# 是否启用分页合理化:当pageNum<1时,会自动查询第一页的数据,当pageNum>pages时,自动查询最后一页数据;
    reasonable: true
# 默认值false,分页插件会从查询方法的参数值中,自动根据上面 params 配置的字段中取值,查找到合适的值时就会自动分页。
    supportMethodsArguments: true
# 用于从对象中根据属性名取值
    params=count: countSql

代码部分

实体类pojo/entity

	@TableId(value = "id", type = IdType.AUTO)
    private Integer id;
    private String name;
    private String address;

controller层

public PageInfo<Address> getListByPage(
            @RequestParam(value = "pageNo",defaultValue = "1") Integer pageNo,
            @RequestParam(value = "pageSize",defaultValue = "10") Integer pageSize,
            @RequestParam("searchValue") String searchValue){
        PageHelper.startPage(pageNo,pageSize);
        List<Address> addresses = this.addressService.getListByPage(searchValue);
        PageInfo<Address> addressPageInfo = new PageInfo<>(addresses);
        return addressPageInfo;
    }

传入参数 pageNo–当前页,pageSize–每页条数,searchValue–模糊查询

PageHelper.startPage(pageNum, pageSize);

pageNum是 当前页数,pageSize是 每页的条数。
数据查询完后使用PageInfo

PageInfo<实体类> pageInfo = new PageInfo<>(查询结果);

serviceI

List<Address> getListByPage(String searchValue);

serviceImpl

public List<Address> getListByPage(String searchValue) {
        List<Address> listByPage = this.addressMapper.getListByPage(searchValue);
        return listByPage;
}

mapper

List<Address> getListByPage(String searchValue);

mapper.xml

<select id="getListByPage" resultType="com.lee.testaddress.entity.Address">
        select
        id, name, address
        from
        t_address
        <where>
            <if test="searchValue != null and searchValue != ''">
               and name like concat ('%',#{searchValue},'%')
            </if>
        </where>
</select>

在这里pageHelper已经帮我们做好分页了,所以我们在sql语句中就不用再加分页limit了

pageInfo其它属性

pageNum:当前页码
pageSize:每页数据的数据条数
size:当前页有多少条数据
startRow:当前页码第一条数据的
endRow:当前页码的开始条
pages:当前页码结束条
navigateFirstPage:首页号
navigateLastPage:尾页号
prePage:上一页
nextPage:下一页
isFirstPage:是否为第一页
isLastPage:是否为最后一页
hasPreviousPage:是否有前一页
hasNextPage:是否有下一页
navigatePages:导航页码数
navigatepageNums:导航页码数 可以遍历

测试

通过Apifox或者Postman测试,我这里使用Apifox进行测试
我表中有40条数据
在这里插入图片描述
我先设置查询每页条数pageSize为10
在这里插入图片描述
得到数据,对照pageInfo其它属性获得变量含义

{
    "total": 40,
    "list": [
        {
            "id": 1,
            "name": "zhangsan",
            "address": "Beijing"
        },
        {
            "id": 2,
            "name": "zhangsan",
            "address": "Beijing"
        },
        {
            "id": 3,
            "name": "zhangsan",
            "address": "Beijing"
        },
        {
            "id": 4,
            "name": "zhangsan",
            "address": "Beijing"
        },
        {
            "id": 5,
            "name": "lisi",
            "address": "Shanghai"
        },
        {
            "id": 6,
            "name": "zhangsan",
            "address": "Beijing"
        },
        {
            "id": 7,
            "name": "zhangsan",
            "address": "Beijing"
        },
        {
            "id": 8,
            "name": "zhangsan",
            "address": "Beijing"
        },
        {
            "id": 9,
            "name": "zhangsan",
            "address": "Beijing"
        },
        {
            "id": 10,
            "name": "wangwu",
            "address": "Shenzhen"
        }
    ],
    "pageNum": 1,
    "pageSize": 10,
    "size": 10,
    "startRow": 1,
    "endRow": 10,
    "pages": 4,
    "prePage": 0,
    "nextPage": 2,
    "isFirstPage": true,
    "isLastPage": false,
    "hasPreviousPage": false,
    "hasNextPage": true,
    "navigatePages": 8,
    "navigatepageNums": [
        1,
        2,
        3,
        4
    ],
    "navigateFirstPage": 1,
    "navigateLastPage": 4
}

然后我设置每页查询50条数据,这样我表中的所有数据全部在第一页查出

{
    "total": 40,
    "list": [
        {
            "id": 1,
            "name": "zhangsan",
            "address": "Beijing"
        },
        {
            "id": 2,
            "name": "zhangsan",
            "address": "Beijing"
        },
        {
            "id": 3,
            "name": "zhangsan",
            "address": "Beijing"
        },
        {
            "id": 4,
            "name": "zhangsan",
            "address": "Beijing"
        },
        {
            "id": 5,
            "name": "lisi",
            "address": "Shanghai"
        },
        {
            "id": 6,
            "name": "zhangsan",
            "address": "Beijing"
        },
        {
            "id": 7,
            "name": "zhangsan",
            "address": "Beijing"
        },
        {
            "id": 8,
            "name": "zhangsan",
            "address": "Beijing"
        },
        {
            "id": 9,
            "name": "zhangsan",
            "address": "Beijing"
        },
        {
            "id": 10,
            "name": "wangwu",
            "address": "Shenzhen"
        },
        {
            "id": 11,
            "name": "zhangsan",
            "address": "Beijing"
        },
        {
            "id": 12,
            "name": "zhangsan",
            "address": "Beijing"
        },
        {
            "id": 13,
            "name": "zhangsan",
            "address": "Beijing"
        },
        {
            "id": 14,
            "name": "zhangsan",
            "address": "Beijing"
        },
        {
            "id": 15,
            "name": "zhaoliu",
            "address": "Nanjing"
        },
        {
            "id": 16,
            "name": "zhangsan",
            "address": "Beijing"
        },
        {
            "id": 17,
            "name": "zhangsan",
            "address": "Beijing"
        },
        {
            "id": 18,
            "name": "zhangsan",
            "address": "Beijing"
        },
        {
            "id": 19,
            "name": "zhangsan",
            "address": "Beijing"
        },
        {
            "id": 20,
            "name": "zhangsan",
            "address": "Beijing"
        },
        {
            "id": 21,
            "name": "zhangsan",
            "address": "Beijing"
        },
        {
            "id": 22,
            "name": "zhangsan",
            "address": "Beijing"
        },
        {
            "id": 23,
            "name": "zhangsan",
            "address": "Beijing"
        },
        {
            "id": 24,
            "name": "zhangsan",
            "address": "Beijing"
        },
        {
            "id": 25,
            "name": "zhangsan",
            "address": "Beijing"
        },
        {
            "id": 26,
            "name": "zhangsan",
            "address": "Beijing"
        },
        {
            "id": 27,
            "name": "zhangsan",
            "address": "Beijing"
        },
        {
            "id": 28,
            "name": "zhangsan",
            "address": "Beijing"
        },
        {
            "id": 29,
            "name": "zhangsan",
            "address": "Beijing"
        },
        {
            "id": 31,
            "name": "zhangsan",
            "address": "Beijing"
        },
        {
            "id": 32,
            "name": "zhangsan",
            "address": "Beijing"
        },
        {
            "id": 33,
            "name": "zhangsan",
            "address": "Beijing"
        },
        {
            "id": 34,
            "name": "zhangsan",
            "address": "Beijing"
        },
        {
            "id": 35,
            "name": "zhangsan",
            "address": "Beijing"
        },
        {
            "id": 36,
            "name": "zhangsan",
            "address": "Beijing"
        },
        {
            "id": 37,
            "name": "zhangsan",
            "address": "Beijing"
        },
        {
            "id": 38,
            "name": "zhangsan",
            "address": "Beijing"
        },
        {
            "id": 39,
            "name": "zhangsan",
            "address": "Beijing"
        },
        {
            "id": 41,
            "name": "zhangsan",
            "address": "Beijing"
        },
        {
            "id": 42,
            "name": "zhangsan",
            "address": "Beijing"
        }
    ],
    "pageNum": 1,
    "pageSize": 50,
    "size": 40,
    "startRow": 1,
    "endRow": 40,
    "pages": 1,
    "prePage": 0,
    "nextPage": 0,
    "isFirstPage": true,
    "isLastPage": true,
    "hasPreviousPage": false,
    "hasNextPage": false,
    "navigatePages": 8,
    "navigatepageNums": [
        1
    ],
    "navigateFirstPage": 1,
    "navigateLastPage": 1
}

模糊查询

查询name中带有lisi的数据
idea打印sql日志
在这里插入图片描述
Apifox返回结果,对照数据库,查询结果正确
在这里插入图片描述
查询name中带有i的数据
在这里插入图片描述
Apifox返回结果,对照数据库,查询结果正确
在这里插入图片描述

结语

文章可能有点长,但是都是一点一滴学习的见证
刚进入开发行业还有我很多学习的地方,我很愿意和大家分享我以后学习的过程,感谢阅读!

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-08-06 10:29:56  更:2022-08-06 10:30:27 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 13:00:38-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码