myBatis插件--pageHelper

本文介绍了如何在SpringBoot项目中引入并配置PafeHelper分页插件,包括Maven依赖、拦截器配置,以及在代码中通过Mapper接口安全使用PageHelper进行分页查询的详细步骤。特别强调了分页参数管理和潜在的安全问题。
摘要由CSDN通过智能技术生成

目录

  • 介绍
  • 引入分页插件
  • 配置拦截器插件
  • 如何在代码中使用

介绍

pafeHelper是一款与MyBatis一起使用的分页插件,建议尝试该分页插件,这一定是最方便使用的分页插件。分页插件支持任何复杂的单表多表分页
插件的具体使用如何使用分页插件

引入分页插件

  • 如果你是maven(springBoot)项目直接在maven中引入依赖即可
<dependency>
	<groupId>com.github.pagehelper</groupId>
	<artifactId>pagehelper-spring-boot-starter</artifactId>
	<version>最新版本</version>
</dependency>

配置拦截器插件

  • 这部分另见如何使用分页插件中的内容
  • 一般情况下,你不需要做任何配置,直接使用默认配置即可完成分页查询

在Spring Boot中,PageHelper的配置通常是通过application.properties或application.yml文件进行的。以下是一个简单的配置示例:

在application.yml文件中:

pagehelper:
  helperDialect: mysql
  reasonable: true
  supportMethodsArguments: true
  params: count=countSql

这里的配置参数含义如下:

  • helperDialect:设置数据库方言,这里是MySQL。
  • reasonable:是否支持接口参数中的pageNum和pageSize为0,为true时表示支持。
  • supportMethodsArguments:是否支持通过Mapper接口参数来传递分页参数,默认值false。
  • params:用于从对象中根据属性名取值,可以配置pageNum,pageSize,count,pageSizeZero,reasonable等。

如何在代码中使用

  • 在pageHelper中能够完成分页查询的调用有很多,这里讲述一种最简单,实用且方便的方式 Mapper接口方式的调用,推荐这种使用方式
  • 具体操作是使用pageHelper.startPage静态方法调用
    • 在导入依赖以及完成配置之后
    • 首先,在相应的功能模块内(比如server层)调用pageHelper.startPage(pageNum,pageSize)pageNum当前页码,pageSize每页查询条目数
    • 然后,在pageHelper.startPage()之后调用查询语句一定要在其后调用查询语句,只有这样才能保证分页查询的安全性
    • 最后,可以使用PageInfo来处理分页查询的内容,这一步可以简化
    • PageHelper会自动拦截并处理查询语句,在查询语句拼接limit生成相应的分页查询语句
    • 还有一点,PageHelper在调用分页查询时,因默认的配置,会自动生成一条查询所有的sql语句,如:select count(*) from ···
  • 代码示例
//获取第1页,10条内容,默认查询总数count
PageHelper.startPage(1, 10);
List<Country> list = countryMapper.selectAll();
//用PageInfo对结果进行包装
PageInfo page = new PageInfo(list);
//测试PageInfo全部属性
//PageInfo包含了非常全面的分页属性
page.getResult(); //获取查询的数据
assertEquals(183, page.getTotal());  //获取所有数据数,该表中所有数据的数量
assertEquals(1, page.getPageNum());  
assertEquals(10, page.getPageSize());
assertEquals(1, page.getStartRow());
assertEquals(10, page.getEndRow());
assertEquals(19, page.getPages());
assertEquals(1, page.getFirstPage());
assertEquals(8, page.getLastPage());
assertEquals(true, page.isFirstPage());
assertEquals(false, page.isLastPage());
assertEquals(false, page.isHasPreviousPage());
assertEquals(true, page.isHasNextPage());
  • 对PageInfo的简化
//开始分页查询,使用mybatis提供的PageHelper插件,向pageQuery调用的sql方法后拼接limit(分页查询)
PageHelper.startPage(pageNum,pageSize);

//调用mapper层方法,向数据库查询
Page<Employee> page = Mapper.pageQuery(Object);

//获取查询的总条目数,调用该方法后,mybatis会自动执行一条查询所有的sql
long total = page.getTotal();

//获取分页查询的结果
List<Employee> records = page.getResult();
  • PageHelper 安全调用

    什么时候会导致不安全的分页?
    PageHelper 方法使用了静态的 ThreadLocal 参数,分页参数和线程是绑定的。

    只要你可以保证在 PageHelper 方法调用后紧跟 MyBatis 查询方法,这就是安全的。因为 PageHelper 在 finally 代码段中自动清除了 ThreadLocal 存储的对象。

    如果代码在进入 Executor 前发生异常,就会导致线程不可用,这属于人为的 Bug(例如接口方法和 XML 中的不匹配,导致找不到 MappedStatement 时), 这种情况由于线程不可用,也不会导致 ThreadLocal 参数被错误的使用。

重要提示

在这里插入图片描述

  • 13
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小胖子S

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值