当前位置: 首页 > news >正文

mybatis PageHelper的坑---记录

记录下,自己新开了一个kotlin的项目从而替换java项目,同时升级了部分组件,包括pageHelper,以往代码里有动态sql的配置

//通过不为null的属性查找数据
val tmpResult: List<Map<String?, Any?>> = sqlSessionTemplate?.selectList("commonSql.queryByNotNullProperties",dynamicDbOperation, RowBounds((curPage - 1) * pageSize, pageSize))

然而在实际查询的时候执行了

select count(0) from table where nama = key;

通过sql日志查看,返回count1,total1,但是就是没有执行查询语句导致获取到的数据一直为空。
百度搜了后说是分页的问题,将RowBounds删了后确实可以了,但是这就无法动态化了(某些原因)。追溯源码查看问题

    public Page getPage(Object parameterObject, RowBounds rowBounds) {Page page = PageHelper.getLocalPage();if (page == null) {//如果不是默认对象就进行分页操作,我这边无论是哪个版本应该都会进入该分支if (rowBounds != RowBounds.DEFAULT) {...} else if (parameterObject instanceof IPage || supportMethodsArguments) {...}if (page == null) {return null;}PageHelper.setLocalPage(page);}...return page;}

上文主要是进入的分支创建对象,明白为啥有些操作在不同版本不一致,下文

AbstractHelperDialect.java
5.3.3@Overridepublic boolean afterCount(long count, Object parameterObject, RowBounds rowBounds) {Page page = getLocalPage();page.setTotal(count);if (rowBounds instanceof PageRowBounds) {((PageRowBounds) rowBounds).setTotal(count);}//pageSize < 0 的时候,不执行分页查询//pageSize = 0 的时候,还需要执行后续查询,但是不会分页if (page.getPageSizeZero() != null) {//PageSizeZero=false&&pageSize<=0if (!page.getPageSizeZero() && page.getPageSize() <= 0) {return false;}//PageSizeZero=true&&pageSize<0 返回 false,只有>=0才需要执行后续的else if (page.getPageSizeZero() && page.getPageSize() < 0) {return false;}}//页码>0 && 开始行数<总行数即可,不需要考虑 pageSize(上面的 if 已经处理不符合要求的值了)return page.getPageNum() > 0 && count > page.getStartRow();}
----------------------------------
5.1.2public boolean afterCount(long count, Object parameterObject, RowBounds rowBounds) {Page page = this.getLocalPage();page.setTotal(count);if (rowBounds instanceof PageRowBounds) {((PageRowBounds)rowBounds).setTotal(count);}if (page.getPageSize() < 0) {return false;} else {return count > 0L;}}

从上面两个版本对比就知道了,一个需要pageNum从1开始,一个不care页码…踩了个小坑…
整改方法就是新增配置:

offsetAsPageNum=true //但我这里默认是true…

val tmpResult: List<Map<String?, Any?>> = sqlSessionTemplate?.selectList("commonSql.queryByNotNullProperties",dynamicDbOperation, RowBounds(curPage, pageSize)) //offset参数做成pageNum且pageNum从1开始

搜索许久就说了pageSize和pageNum的问题,没说0和1,追踪源码才知道如何修改。。。

果然啊 看源码能解决大部分问题。

http://www.lryc.cn/news/104382.html

相关文章:

  • uniapp微信小程序下载文件并打开
  • 安卓Intent打开系统进程汇总
  • python学习(廖雪峰的官方网站部分,自学笔记)
  • python题-检查该字符串的括号是否成对出现
  • 3ds Max建模教程:模拟布料拖拽撕裂和用剑撕裂两种效果
  • 数据可视化(4)散点图及面积图
  • Redis - 数据过期策略
  • 英文论文(sci)解读复现:基于YOLOv5的自然场景下苹果叶片病害实时检测
  • 【Liux下6818开发板(ARM)】实现简易相册
  • Kubernetes(K8s)从入门到精通系列之六:K8s的基本概念和术语之存储类
  • Spark-统一内存模型
  • 类的继承和super关键字的使用(JAVA)
  • BGP属性+选路规则
  • 类的实例化
  • 智能提词器有哪些?了解一下这款提词工具
  • oracle 19c rac环境配置firewalld
  • Flutter 之Bloc入门指南实现倒计时功能
  • 目标识别数据集互相转换——xml、txt、json数据格式互转
  • 211. 添加与搜索单词 - 数据结构设计---------------字典树
  • SQL Server通过指令备份数据库和恢复数据库
  • windows如何上架ios应用到app store
  • Hadoop学习日记-YARN组件
  • 汽车过户时,怎么选到理想的好车牌?
  • 力扣468 验证IP地址
  • 前端静态登录页面实现
  • 华为数通HCIA-网络参考模型(TCP/IP)
  • java快速生成数据库表文档(HTML、DOC、MD)
  • Dojo学习和常用知识
  • 媒体查询详解
  • 华为数通HCIP-IGMP(网络组管理协议)