【日常记录-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出现;

相关推荐
小白的一叶扁舟13 分钟前
深入剖析 JVM 内存模型
java·jvm·spring boot·架构
sjsjsbbsbsn22 分钟前
基于注解实现去重表消息防止重复消费
java·spring boot·分布式·spring cloud·java-rocketmq·java-rabbitmq
苹果醋323 分钟前
golang 编程规范 - Effective Go 中文
java·运维·spring boot·mysql·nginx
唯余木叶下弦声1 小时前
PySpark之金融数据分析(Spark RDD、SQL练习题)
大数据·python·sql·数据分析·spark·pyspark
fajianchen1 小时前
记一次线上SQL死锁事故:如何避免死锁?
数据库·sql
chengpei1471 小时前
实现一个自己的spring-boot-starter,基于SQL生成HTTP接口
java·数据库·spring boot·sql·http
等一场春雨2 小时前
Java设计模式 十二 享元模式 (Flyweight Pattern)
java·设计模式·享元模式
努力搬砖的程序媛儿4 小时前
uniapp悬浮可拖拽按钮
java·前端·uni-app
上海拔俗网络4 小时前
“AI开放式目标检测系统:开启智能识别新时代
java·团队开发
Leaf吧4 小时前
springboot 配置多数据源以及动态切换数据源
java·数据库·spring boot·后端