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

MyBatis针对MySQL模糊查询中特殊字符(%和_)的处理方案

在使用MyBatis进行模糊查询时,你是否遇到过用户输入%或_导致查询结果异常返回全部数据的问题?本文将深入分析问题原因并提供完整的解决方案。

问题现象与原因分析

问题复现

在模糊查询场景中,当用户输入包含%或_时(如搜索%_),查询会返回全部数据而非预期结果。

-- 示例SQL
SELECT * FROM users WHERE username LIKE '%'#{searchKey}'%'

根本原因

在SQL中,%和_是LIKE操作符的特殊通配符:

  • % 匹配任意长度字符(包括零个字符)
  • _ 匹配单个字符

当用户输入中包含这些字符时,它们会被SQL解析为通配符而非普通字符,导致查询范围扩大。

解决方案

public class EscapeUtil {/*** 转义字符串中的特殊字符(_和%),使其在MySQL LIKE查询中作为普通字符匹配* @param input 待转义的字符串* @return 转义后的字符串(已trim),若输入为blank则原样返回*/public static String escapeLike(String input){if (StringUtils.isBlank(input)) {return input;}// 使用标准MySQL转义符(\)替代原代码中的/return input.trim().replace("\\", "\\\\").replace("_", "\\_").replace("%", "\\%");}
}
http://www.dtcms.com/a/330156.html

相关文章:

  • BGE:智源研究院的通用嵌入模型家族——从文本到多模态的语义检索革命
  • 模型驱动的自动驾驶AI系统全生命周期安全保障
  • C++入门自学Day10-- Vector类的自实现
  • Nginx学习与安装
  • Docker(springcloud笔记第三期)
  • docker 将本地python环境(有系统依赖)进行打包移到另一个服务器进行部署
  • 飞算AI:企业智能化转型的新引擎——零代码重塑生产力
  • sql查询优化方式常见情况总结
  • TLSv1.2协议与TCP/UDP协议传输数据内容差异
  • 【Redis】Sentinel (哨兵)
  • 深度学习实战114-基于大模型的深度研究(DeepResearch)架构:从自主信息探索到洞察生成的革命
  • games101 第三讲 Transformation(变换)
  • RK3568项目(十五)--linux驱动开发之进阶驱动
  • Linux应用层开发--进程处理
  • 【完整源码+数据集+部署教程】医学报告图像分割系统源码和数据集:改进yolo11-HGNetV2
  • @Linux进程管理工具 - PM2全面指南
  • 理财 - 基金
  • 【React】use-immer vs 原生 Hook:谁更胜一筹?
  • PromptPilot — AI 自动化任务的下一个环节
  • 云蝠智能 Voice Agent 多模型接入技术架构与实践
  • 微信小程序实现导航至目的地
  • 腾讯位置商业授权微信小程序关键词输入提示
  • python自学笔记7 可视化初步
  • 并发编程(八股)
  • epoll模型解析
  • 数据科学与计算:从基础到实践的全面探索
  • 深度学习(6):参数初始化
  • 动画相关 属性动画+animateToImmediately+ImageAnimator帧动画组件+模态转场
  • 【C++】哈希表的实现
  • EUDR的核心内容,EUDR认证的好处,EUDR意义