【日常记录-Mybatis】PageHelper导致语句截断

1. 简介

PageHelper是Mybatis-Plus中的一个插件,主要用于实现数据库的分页查询功能。其核心原理是将传入的页码和条数赋值给一个Page对象,并保存到本地线程ThreadLocal中,接下来,PageHelper会进入Mybatis的拦截器环节,在拦截器中获取并处理刚才保存在ThreadLocal中的分页参数。这些分页参数会与原本的SQL语句和内部已经定义好的SQL进行拼接,从而完成带有分页处理的SQL语句的构建。

2. 现象描述

2.1 代码

复制代码
// 调用位置
PageHelper.startPage(pageNum,pageSize);
List<MyObject> result = customMapper.getList(taskId,name);


// Mapper中方法的定义
List<MyObject> getList(@Param("taskId")String taskId,@Param("name")String name);


// xml定义SQL语句
<select id="getList" resultType="MyObject">
   select * from myTable where task_id = #{taskId}



   <if test="name != null">
       and name= #{name}
   </if>

   order by id desc
</select>

2.2 异常信息

3. 原因

PageHelper在进行SQL语句解析时,若在where子句中遇到连续多于两个的\n,则直接截断返回,导致语句出错。2.1代码中的where子句在task_id=?\n之后,出现连续4个\n导致语句被截断。

4. 解决方案

方案1:where子句中不要出现空行即可;

方案2: 在每个空行中输入空格,避免多个连续\n出现;

相关推荐
黑色的山岗在沉睡12 分钟前
LeetCode 189. 轮转数组
java·算法·leetcode
会飞的小蛮猪18 分钟前
Jenkins运维之路(权限分配&忘记admin密码)
java·运维·经验分享·jenkins·prometheus
slim~31 分钟前
Java基础第9天总结(可变参数、Collections、斗地主)
java·开发语言
豆沙沙包?1 小时前
2025年- H118-Lc86. 分隔链表(链表)--Java版
java·数据结构·链表
A尘埃2 小时前
智能工单路由系统(Java)
java·开发语言·智能工单
失散133 小时前
分布式专题——1.1 Redis单机、主从、哨兵、集群部署
java·数据库·redis·分布式·架构
刘一说3 小时前
Linux调试命令速查:Java/微服务必备
java·linux·微服务
IT·陈寒3 小时前
怎么这么多 StringUtils —— Apache、Spring、Hutool 全面对比
java·spring·apache
AAA修煤气灶刘哥3 小时前
MySQL 查文本查哭了?来唠唠 ES 这货:从 “啥是 ES” 到 Java 撸代码,一篇整明白!
java·后端·elasticsearch