PageHelper : mybatis中的分页插件
文档 : https://github.com/pagehelper/Mybatis-PageHelper/blob/master/wikis/zh/HowToUse.md
springboot使用PageHelper
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper-spring-boot-starter</artifactId>
<version>最新版本</version>
</dependency>
springboot配置文件:
# 是否启用合理化分页,默认 false,,如果为true,当pageNum小于1的时候,会自动设置为1,
#大于totalPages的时候会设置为 totalPages
pagehelper.reasonable=false
# 没有手动的进行count查询,pagehelper会在进行分页之前自动查询一次count,获取总记录数,,确保分页结果的准确
# 如果你不希望进行默认的count查询,设置为false,节省数据库开销
pagehelper.defaultCount=true
其他的配置:
spring.datasource.url=jdbc:mysql://localhost:3306/sleeve?serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
mybatis.mapper-locations=classpath:mapper/*.xml
mybatis.configuration.mapUnderscoreToCamelCase=true
logging.level.com.cj.mapper=debug
使用:
问题
pageHelper不安全分页:
PageHelper的 分页参数 和 线程 是绑定的,如果PageHelper生成了一个分页参数,并且没有被消费,这个参数就会一直保留在这个线程中,,,当这个分页参数消费了之后,PageHelper会在finally代码中自动清除了ThreadLocal存储的对象,,
当你想分页的查询没有走,就会莫名其妙的分页下一个查询,,可以使用`PageHelper.clearPage()` 在这个查询之后,强制清空分页参数
mybatis使用collection之后,父集合分页问题
使用了 collection之后,,select标签中的语句,一般是联合查询,,pageHelper分页就会根据这个联合查询的结果,进行分页,,导致,分页的不是我们想要的父集合,,是联合查询的父子集合
collection 标签中,可以分段查询,先查父集合,,在根据传入的方法和参数,进行子查询,这样分页就不会有问题
<resultMap id="spuMap" type="com.cj.model.Spu">
<id property="id" column="id"/>
<result property="title" column="title"/>
<collection property="skuList" ofType="com.cj.model.Sku" select="com.cj.mapper.SkuMapper.getSkuBySpuid" column="id">
<id property="id" column="id"/>
<result property="title" column="title"/>
</collection>
</resultMap>
<select id="getspuByPage" resultMap="spuMap">
select * from spu
</select>
select : 获取子集合数据的查询语句
column : 父对象中用于关联的列名
fetchType: lazy ,eager : 是否是懒加载
引用:https://blog.csdn.net/weixin_43786801/article/details/126904052