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返回结果,对照数据库,查询结果正确

在这里插入图片描述

结语

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

  • 0
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot项目中集成PageHelper分页插件的步骤如下: 1. 打开Maven库,找到com.github.pagehelper:pagehelper-spring-boot-starter。 2. 确定需要使用的版本号,比如1.4.1。 3. 在项目的pom.xml文件中添加PageHelper的依赖。可以使用如下代码: ``` <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper-spring-boot-starter</artifactId> <version>1.4.1</version> </dependency> ``` 4. 在application.properties或application.yml配置文件中进行配置,添加以下属性: ``` # 开启分页支持 pagehelper.helper-dialect=mysql pagehelper.reasonable=true pagehelper.support-methods-arguments=true pagehelper.params=count=countSql ``` 这里的配置是针对MySQL数据库的,如果你使用的是其他数据库,需要根据对应的数据库类型进行配置。 5. 在需要分页的Mapper方法上使用PageHelper.startPage方法来开启分页功能。例如: ``` @Mapper public interface UserMapper { List<User> getUsers(); } ``` 在UserMapper接口中的方法上加上注解@Select,并在方法内部使用PageHelper.startPage方法开启分页,如下所示: ``` @Select("SELECT * FROM user") List<User> getUsers(); ``` 6. 运行项目,分页功能就会生效。 通过以上步骤,你就可以在Spring Boot项目中成功集成PageHelper分页插件了。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [springboot整合分页插件PageHelper](https://blog.csdn.net/weixin_42408447/article/details/117528795)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [Springboot集成pagehelper 分页插件](https://blog.csdn.net/weixin_58696998/article/details/124397756)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值