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

MyBatis处理LIKE查询时,如何将传值中包含下划线_和百分号%等特殊字符处理成普通字符而不是SQL的单字符通配符

MySQL中,_和%在LIKE模糊匹配中有特殊的含义:

  • 下划线 _ 在LIKE模糊匹配中表示匹配任意单个字符。
  • 百分号 % 在LIKE模糊匹配中表示匹配任意多个字符(包括零个字符)

如果这种字符不经过处理,并且你的模糊查询sql语句书写如下,那么在你的前端页面搜索框中输入下划线或者百分号时候,搜索到的数据就是全量数据,未达到我们的预期。

<select id="findByPattern" resultType="com.example.entity.YourEntity">SELECT * FROM your_table WHERE your_column LIKE concat('%', #{pattern}, '%')
</select>

如何将这种特殊字符变成普通字符而不是 sql的单字符通配符?

在XML配置的MyBatis中处理LIKE查询时,如果前端传递的值中包含了下划线_,并且你想要这个下划线被视为普通字符而不是SQL的单字符通配符,你需要在MyBatis的XML映射文件中对这个字符进行转义。

在MyBatis中,你可以使用<![CDATA[]]>区块来避免XML解析错误,并在SQL查询中使用\\来转义下划线。这里是一个如何在XML映射文件中处理这种情况的例子:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.mapper.YourMapper"><!-- 定义一个查询操作 --><select id="findByPattern" resultType="com.example.entity.YourEntity">SELECT * FROM your_table WHERE your_column LIKE CONCAT('%', REPLACE(#{pattern}, '_', '\\_'), '%')</select></mapper>

在这个例子中,REPLACE(#{pattern}, '_', '\\_')函数将传入的参数中的所有下划线_替换为转义后的下划线\\_。CONCAT函数用于在参数的前后添加百分号%作为通配符。

如上代码只处理了单一下划线的情况,如果前端传递的值中包含的下划线_或百分号%都处理呢,下面是一个XML映射文件中处理这种情况的例子:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.mapper.YourMapper"><!-- 定义一个查询操作 --><select id="findByPattern" resultType="com.example.entity.YourEntity">SELECT * FROM your_table WHERE your_column LIKE CONCAT('%', #{escapedPattern}, '%')</select></mapper>

在这个例子中,escapedPattern是经过转义处理的搜索模式。在Java代码中,你需要在传递参数之前对搜索词进行转义处理: 

public class YourService {private final SqlSessionFactory sqlSessionFactory;public YourService(SqlSessionFactory sqlSessionFactory) {this.sqlSessionFactory = sqlSessionFactory;}public List<YourEntity> search(String searchTerm) {try (SqlSession session = sqlSessionFactory.openSession()) {// 在这里处理参数,确保它包含了SQL LIKE通配符,并对特殊字符进行转义String escapedPattern = searchTerm.replace("_", "\\_").replace("%", "\\%");return session.selectList("com.example.mapper.YourMapper.findByPattern", escapedPattern);}}
}

在这个例子中,searchTerm是前端传递的原始字符串,它可能包含下划线_和百分号%。在Java代码中,我们使用replace方法对这些特殊字符进行转义处理,然后将处理过的搜索词传递给MyBatis进行LIKE查询。

并且使用try-with-resources写法

try (SqlSession session = sqlSessionFactory.openSession())

在try-with-resources语句中,你可以声明一个或多个资源,这些资源在try块执行完毕后会自动关闭。在这种情况下,SqlSession会在try块执行完毕后自动关闭,无需手动调用close方法。这种写法可以确保资源被正确关闭,即使在发生异常的情况下也能够执行关闭操作,从而避免资源泄漏。

相关文章:

MyBatis处理LIKE查询时,如何将传值中包含下划线_和百分号%等特殊字符处理成普通字符而不是SQL的单字符通配符

MySQL中&#xff0c;_和%在LIKE模糊匹配中有特殊的含义&#xff1a; 下划线 _ 在LIKE模糊匹配中表示匹配任意单个字符。百分号 % 在LIKE模糊匹配中表示匹配任意多个字符&#xff08;包括零个字符&#xff09; 如果这种字符不经过处理&#xff0c;并且你的模糊查询sql语句书写…...

Spring MVC(三) 国际化

SpringMVC 国际化 1、添加相关依赖2、配置MessageSourceBean方式一&#xff1a;ReloadableResourceBundleMessageSource方式二&#xff1a;ResourceBundleMessageSource 3、添加消息资源文件英文 messages_en.properties中文 messages_zh_CN.properties默认 messages.propertie…...

四款坚固耐用、小尺寸、1EDB9275F、1EDS5663H、1EDN9550B、1EDN7512G单通道栅极驱动器IC

1、1EDB9275F 采用DSO-8 150mil封装的单通道隔离栅极驱动器&#xff08;PG-DSO-8&#xff09; EiceDRIVER™ 1EDB 产品系列 单通道栅极驱动器IC具有3 kVrms的输入输出隔离电压额定值。 栅极驱动器系列具有6/-4 ns传输延迟精度&#xff0c;可针对具有高系统级效率的快速开关应…...

登录页添加验证码

登录页添加验证码 引入验证码页面组件&#xff1a;ValidCode.vue <template><div class"ValidCodeContent" style""><divclass"ValidCode disabled-select":style"width:${width}; height:${height}"click"refre…...

03--数据库连接池

1、数据库连接池 1.1 JDBC数据库连接池的必要性 在使用开发基于数据库的web程序时&#xff0c;传统的模式基本是按以下步骤&#xff1a; 在主程序&#xff08;如servlet、beans&#xff09;中建立数据库连接进行sql操作断开数据库连接 这种模式开发&#xff0c;存在的问题:…...

MySQL表的基本插入查询操作详解

博学而笃志&#xff0c;切问而近思 文章目录 插入插入更新 替换查询全列查询指定列查询查询字段为表达式查询结果指定别名查询结果去重 WHERE 条件基本比较逻辑运算符使用LIKE进行模糊匹配使用IN进行多个值匹配 排序筛选分页结果更新数据删除数据截断表聚合函数COUNTSUMAVGMAXM…...

『 C++ 』红黑树RBTree详解 ( 万字 )

文章目录 &#x1f996; 红黑树概念&#x1f996; 红黑树节点的定义&#x1f996; 红黑树的插入&#x1f996; 数据插入后的调整&#x1f995; 情况一:ucnle存在且为红&#x1f995; 情况二:uncle不存在或uncle存在且为黑&#x1f995; 插入函数代码段(参考)&#x1f995; 旋转…...

c# 人脸识别的思路

在C#中实现人脸识别&#xff0c;您可以使用诸如虹软ArcFace等第三方人脸识别SDK。以下是一个基于虹软ArcFace SDK的C#人脸识别示例的大致步骤&#xff1a; 安装与引用SDK&#xff1a; 首先&#xff0c;您需要从虹软官网下载适用于C#的ArcFace人脸识别SDK&#xff0c;并将其安装…...

如何用AI提高论文阅读效率?

已经2024年了&#xff0c;该出现一个写论文解读AI Agent了。 大家肯定也在经常刷论文吧。 但真正尝试过用GPT去刷论文、写论文解读的小伙伴&#xff0c;一定深有体验——费劲。其他agents也没有能搞定的&#xff0c;今天我发现了一个超级厉害的写论文解读的agent &#xff0c…...

文件重命名方法:不同路径的文件名大小写如何批量转换技巧

在文件管理中&#xff0c;经常要处理文件重命名的问题&#xff0c;尤其是涉及到不同路径下的文件名大小写转换时。下面来看云炫文件管理器如何批量转换文件名的大小写的技巧&#xff0c;轻松完成这项任务。 准备多个不同路径文件夹&#xff0c;在里面各放几个文件。接下来开始…...

深度学习中的最优化算法是什么?

在深度学习中&#xff0c;最优化算法主要用于调整神经网络的参数&#xff08;如权重和偏差&#xff09;&#xff0c;以最小化或最大化某个目标函数&#xff08;通常是损失函数&#xff09;。这些算法对于训练高效、准确的深度学习模型至关重要。以下是几种在深度学习中常用的最…...

SQL执行时间过长如何优化

这个问题&#xff0c;其实跟慢 SQl 排查解决有点像。可以从以下这几个方面入手&#xff1a; 确定瓶颈 首先查看 MySQL 日志、慢查询日志、explain 分析 SQL 的执行计划、profile 分析执行耗时、Optimizer Trace分析详情等操作&#xff0c;确定查询执行的瓶颈在哪里。只有确定…...

局部阈值 local_threshold

Currently the operator offers only the Method adapted_std_deviation. This algorithm is a text binarization technique and provides good results for document images. 目前这个算子只提供adapted_std_deviation方法&#xff0c;这个算子是一个文本二值化技术&#xf…...

【C/C++】C语言的高级编程(内存分区,指针)

C语言的高级编程【内存&#xff0c;指针】 基本知识变量gcc size工具 内存分区指针相关定义和赋值指针加法函数指针多级指针数组指针传参 基本知识 变量 变量解释全局变量出现在代码块{}之外的变量就是全局变量局部变量一般情况下&#xff0c;代码块{}内部定义的变量就是自动…...

Python ❀ 使用代码实现API接口调用详解

文章目录 1. 工具准备1.1. requests代码包1.2. BurpSuite抓包工具 2. 操作过程2.1. 一个简单的请求2.1.1. Burp获取响应2.1.2. 转发获取响应 2.2. 构造GET类型URL参数2.3. 构造请求头部2.4. 构造POST类型payload数据2.4.1. urlencoded格式2.4.2. json格式 本文主要讲解常用API接…...

关于KT6368A双模蓝牙芯片的BLE在ios的lightblue大数量数据测试

测试简介 关于KT6368A双模蓝牙芯片的BLE在ios的lightblue app大数量数据测试 测试环境&#xff1a;iphone7 。KT6368A双模程序96B6 App&#xff1a;lightblue ios端 可以打开log日志查看通讯流程 测试数据&#xff1a;长度是1224个字节&#xff0c;单次直接发给KT6368A&a…...

云边协同的 RTC 如何助力即构全球实时互动业务实践

作者&#xff1a;即构科技 由 51 CTO 主办的“WOT 全球技术创新大会 2023深圳站”于 11 月 24 日 - 25 日召开&#xff0c;即构科技后台技术总监肖潇以“边缘容器在全球音视频场景的探索与实践”为主题进行分享。 边缘计算作为中心云计算的补充&#xff0c;通过边缘容器架构和…...

使用python连接elasticsearch

有一个困惑了好久的问题&#xff0c;那就是从python里面连接elasticsearch总是报错。大致长这样 一开始我是看网上把es的安全功能关闭&#xff0c;也就是下面的内容&#xff0c;这个要进入到es的docker中去改config/elasticsearch.yml配置文件&#xff0c;但是这样改了以后kib…...

使用elasticsearchdump迁移elasticsearch数据实战

目录 1.安装nodejs 2.安装elasticsearchdump 3.迁移 4.核对数据 5.注意事项 1.安装nodejs https://ascendking.blog.csdn.net/article/details/135509838 2.安装elasticsearchdump npm install elasticdump -g 3.迁移 elasticdump --inputhttp://用户:密码源ES地址/源…...

指向未来: 量子纠缠的本质是一个指针

指向未来: 量子纠缠的本质是一个指针 概述基本概念理解量子纠缠PythonJavaC 理解波粒二象性PythonJavaC 理解量子隧穿理解宇宙常量PythonJavaC 概述 量子纠缠 (Quantum Entanglement) 是量子系统重两个或多个粒子间的一种特殊连接, 这种连接使得即使相隔很远, 这些粒子的状态也…...

高校生最适用的AI论文网站是哪款?

国内高校学生在论文写作中越来越依赖AI工具&#xff0c;目前主流方案以本土化全流程工具为核心&#xff0c;结合通用大模型与专业辅助工具&#xff0c;覆盖选题构思、框架搭建、初稿撰写、内容降重、查重检测以及格式排版等关键环节&#xff0c;以下将深入解析并对比当前最适配…...

ElevenLabs瑞典文语音生成延迟超800ms?独家逆向分析其WebRTC音频缓冲机制,给出3行代码级低延迟注入方案

更多请点击&#xff1a; https://codechina.net 第一章&#xff1a;ElevenLabs瑞典文语音生成延迟超800ms&#xff1f;独家逆向分析其WebRTC音频缓冲机制&#xff0c;给出3行代码级低延迟注入方案 ElevenLabs 在瑞典语&#xff08;sv-SE&#xff09;TTS 服务中默认启用高保真音…...

CANN/asc-devkit:__float2float_rn类型转换函数

__float2float_rn 【免费下载链接】asc-devkit 本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言&#xff0c;原生支持C和C标准规范&#xff0c;主要由类库和语言扩展层构成&#xff0c;提供多层级API&#xff0c;满足多维场景算子开发诉求。 项目地址: https://gitco…...

如何快速上手Excel-DNA:构建专业Excel插件的完整实战指南

如何快速上手Excel-DNA&#xff1a;构建专业Excel插件的完整实战指南 【免费下载链接】ExcelDna Excel-DNA - Free and easy .NET for Excel. This repository contains the core Excel-DNA library. 项目地址: https://gitcode.com/gh_mirrors/ex/ExcelDna Excel-DNA是…...

终极密码学工具箱ToolsFx:30+编码转换与一键解码的完整解决方案

终极密码学工具箱ToolsFx&#xff1a;30编码转换与一键解码的完整解决方案 【免费下载链接】ToolsFx 跨平台密码学工具箱。包含编解码&#xff0c;编码转换&#xff0c;加解密&#xff0c; 哈希&#xff0c;MAC&#xff0c;签名&#xff0c;大数运算&#xff0c;压缩&#xff0…...

机器人仿真创新方案:基于ROS的工业级虚拟测试平台

机器人仿真创新方案&#xff1a;基于ROS的工业级虚拟测试平台 【免费下载链接】wpr_simulation 项目地址: https://gitcode.com/gh_mirrors/wp/wpr_simulation 在机器人技术快速发展的今天&#xff0c;硬件成本高昂、测试周期漫长、算法验证困难已成为制约机器人产业发…...

3步搞定专业级流程图:dagre-d3终极可视化指南

3步搞定专业级流程图&#xff1a;dagre-d3终极可视化指南 【免费下载链接】dagre-d3 A D3-based renderer for Dagre 项目地址: https://gitcode.com/gh_mirrors/da/dagre-d3 还在为创建复杂的流程图而头疼吗&#xff1f;&#x1f914; 今天我要向大家介绍一个神奇的工具…...

VMware虚拟机突然断网?别慌,试试这个NAT模式一键重置法(附主机WiFi适配器设置)

VMware虚拟机断网急救指南&#xff1a;NAT模式重置与主机适配器深度解析 从一次紧急调试说起 深夜11点23分&#xff0c;程序员老张正在虚拟机里调试一个即将上线的微服务接口。突然&#xff0c;git pull命令卡住不动&#xff0c;ping测试显示"Destination Host Unreachabl…...

国产GPU与CAD软件兼容性认证实战:从驱动优化到Linux部署全解析

1. 项目概述&#xff1a;一次“硬核”的国产化适配实战最近&#xff0c;我们团队完成了一项在工业软件领域颇具里程碑意义的兼容性认证工作——摩尔线程GPU与中望二三维CAD Linux版产品。这听起来可能像是一则普通的官方新闻稿&#xff0c;但背后涉及的&#xff0c;是从硬件驱动…...

从游戏地图切割到3D模型生成:凸多边形三角剖分在Unity/C++中的实战应用

从游戏地图切割到3D模型生成&#xff1a;凸多边形三角剖分在Unity/C中的实战应用 在游戏开发中&#xff0c;我们经常需要处理复杂的几何形状。无论是为开放世界游戏创建导航网格&#xff0c;还是为3D模型生成优化的三角面片&#xff0c;凸多边形的三角剖分都是核心技能之一。不…...