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中,_和%在LIKE模糊匹配中有特殊的含义: 下划线 _ 在LIKE模糊匹配中表示匹配任意单个字符。百分号 % 在LIKE模糊匹配中表示匹配任意多个字符(包括零个字符) 如果这种字符不经过处理,并且你的模糊查询sql语句书写…...
Spring MVC(三) 国际化
SpringMVC 国际化 1、添加相关依赖2、配置MessageSourceBean方式一:ReloadableResourceBundleMessageSource方式二:ResourceBundleMessageSource 3、添加消息资源文件英文 messages_en.properties中文 messages_zh_CN.properties默认 messages.propertie…...
四款坚固耐用、小尺寸、1EDB9275F、1EDS5663H、1EDN9550B、1EDN7512G单通道栅极驱动器IC
1、1EDB9275F 采用DSO-8 150mil封装的单通道隔离栅极驱动器(PG-DSO-8) EiceDRIVER™ 1EDB 产品系列 单通道栅极驱动器IC具有3 kVrms的输入输出隔离电压额定值。 栅极驱动器系列具有6/-4 ns传输延迟精度,可针对具有高系统级效率的快速开关应…...
登录页添加验证码
登录页添加验证码 引入验证码页面组件:ValidCode.vue <template><div class"ValidCodeContent" style""><divclass"ValidCode disabled-select":style"width:${width}; height:${height}"click"refre…...
03--数据库连接池
1、数据库连接池 1.1 JDBC数据库连接池的必要性 在使用开发基于数据库的web程序时,传统的模式基本是按以下步骤: 在主程序(如servlet、beans)中建立数据库连接进行sql操作断开数据库连接 这种模式开发,存在的问题:…...
MySQL表的基本插入查询操作详解
博学而笃志,切问而近思 文章目录 插入插入更新 替换查询全列查询指定列查询查询字段为表达式查询结果指定别名查询结果去重 WHERE 条件基本比较逻辑运算符使用LIKE进行模糊匹配使用IN进行多个值匹配 排序筛选分页结果更新数据删除数据截断表聚合函数COUNTSUMAVGMAXM…...
『 C++ 』红黑树RBTree详解 ( 万字 )
文章目录 🦖 红黑树概念🦖 红黑树节点的定义🦖 红黑树的插入🦖 数据插入后的调整🦕 情况一:ucnle存在且为红🦕 情况二:uncle不存在或uncle存在且为黑🦕 插入函数代码段(参考)🦕 旋转…...
c# 人脸识别的思路
在C#中实现人脸识别,您可以使用诸如虹软ArcFace等第三方人脸识别SDK。以下是一个基于虹软ArcFace SDK的C#人脸识别示例的大致步骤: 安装与引用SDK: 首先,您需要从虹软官网下载适用于C#的ArcFace人脸识别SDK,并将其安装…...
如何用AI提高论文阅读效率?
已经2024年了,该出现一个写论文解读AI Agent了。 大家肯定也在经常刷论文吧。 但真正尝试过用GPT去刷论文、写论文解读的小伙伴,一定深有体验——费劲。其他agents也没有能搞定的,今天我发现了一个超级厉害的写论文解读的agent ,…...
文件重命名方法:不同路径的文件名大小写如何批量转换技巧
在文件管理中,经常要处理文件重命名的问题,尤其是涉及到不同路径下的文件名大小写转换时。下面来看云炫文件管理器如何批量转换文件名的大小写的技巧,轻松完成这项任务。 准备多个不同路径文件夹,在里面各放几个文件。接下来开始…...
深度学习中的最优化算法是什么?
在深度学习中,最优化算法主要用于调整神经网络的参数(如权重和偏差),以最小化或最大化某个目标函数(通常是损失函数)。这些算法对于训练高效、准确的深度学习模型至关重要。以下是几种在深度学习中常用的最…...
SQL执行时间过长如何优化
这个问题,其实跟慢 SQl 排查解决有点像。可以从以下这几个方面入手: 确定瓶颈 首先查看 MySQL 日志、慢查询日志、explain 分析 SQL 的执行计划、profile 分析执行耗时、Optimizer Trace分析详情等操作,确定查询执行的瓶颈在哪里。只有确定…...
局部阈值 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方法,这个算子是一个文本二值化技术…...
【C/C++】C语言的高级编程(内存分区,指针)
C语言的高级编程【内存,指针】 基本知识变量gcc size工具 内存分区指针相关定义和赋值指针加法函数指针多级指针数组指针传参 基本知识 变量 变量解释全局变量出现在代码块{}之外的变量就是全局变量局部变量一般情况下,代码块{}内部定义的变量就是自动…...
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大数量数据测试 测试环境:iphone7 。KT6368A双模程序96B6 App:lightblue ios端 可以打开log日志查看通讯流程 测试数据:长度是1224个字节,单次直接发给KT6368A&a…...
云边协同的 RTC 如何助力即构全球实时互动业务实践
作者:即构科技 由 51 CTO 主办的“WOT 全球技术创新大会 2023深圳站”于 11 月 24 日 - 25 日召开,即构科技后台技术总监肖潇以“边缘容器在全球音视频场景的探索与实践”为主题进行分享。 边缘计算作为中心云计算的补充,通过边缘容器架构和…...
使用python连接elasticsearch
有一个困惑了好久的问题,那就是从python里面连接elasticsearch总是报错。大致长这样 一开始我是看网上把es的安全功能关闭,也就是下面的内容,这个要进入到es的docker中去改config/elasticsearch.yml配置文件,但是这样改了以后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) 是量子系统重两个或多个粒子间的一种特殊连接, 这种连接使得即使相隔很远, 这些粒子的状态也…...
Phi-3 Forest Laboratory创意图像提示词生成效果:将抽象概念转化为视觉描述
Phi-3 Forest Laboratory创意图像提示词生成效果:将抽象概念转化为视觉描述 你有没有过这样的经历?脑子里冒出一个特别酷的画面,比如“赛博朋克风格的孤独”,或者“初夏清晨的宁静”,感觉特别有味道,但就是…...
viem ABI工具使用教程:编码、解码和类型推断全攻略
viem ABI工具使用教程:编码、解码和类型推断全攻略 【免费下载链接】viem TypeScript Interface for Ethereum 项目地址: https://gitcode.com/gh_mirrors/vi/viem viem是一个轻量级、可组合且类型安全的TypeScript以太坊接口工具库,其强大的ABI工…...
Realistic Vision V5.1开源镜像部署教程:Docker+Streamlit一体化环境搭建
Realistic Vision V5.1开源镜像部署教程:DockerStreamlit一体化环境搭建 1. 项目概述 Realistic Vision V5.1是目前SD 1.5生态中最顶级的写实风格模型之一,能够生成媲美专业单反相机拍摄的人像照片。本文将带你从零开始,通过Docker容器和St…...
清音刻墨镜像免配置亮点:内置10+中文领域词典(医疗/法律/IT)开箱即用
清音刻墨镜像免配置亮点:内置10中文领域词典(医疗/法律/IT)开箱即用 1. 为什么字幕对齐需要专业词典? 做视频字幕的朋友都知道,最头疼的不是生成文字,而是让文字和声音完美对齐。普通字幕工具遇到专业术语…...
MySQL迁移到达梦数据库:DMP文件转换的3种方案对比(附性能测试数据)
MySQL到达梦数据库迁移实战:DMP文件转换方案深度评测 在国产化替代浪潮下,越来越多的企业开始将MySQL数据库迁移至达梦等国产数据库平台。作为国产数据库的领军者,达梦DM8在性能、安全性和兼容性方面表现出色,但迁移过程中数据类型…...
ES核心索引机制深度解析:从“正排”与“倒排”的底层原理到实战应用场景
1. 正排索引与倒排索引的本质区别 第一次接触Elasticsearch时,我被"正排"和"倒排"这两个概念绕得头晕。直到有次做商品搜索功能,才真正理解它们的差异。想象你面前有两本电话簿:一本按人名排序(正排ÿ…...
MAX17332 Arduino库详解:单节锂电池燃料计量与独立充电控制
1. 项目概述 MAX17332 是 Maxim Integrated(现为 Analog Devices)推出的一款高度集成的单节锂离子/锂聚合物电池管理芯片,专为紧凑型便携设备设计。它并非传统意义上的“纯BMS”(Battery Management System)࿰…...
OpenClaw+GLM-4.7-Flash:个人博客内容自动生成与发布
OpenClawGLM-4.7-Flash:个人博客内容自动生成与发布 1. 为什么选择这个技术组合 去年夏天,我发现自己陷入了写作瓶颈——每周要产出3篇技术博客,但80%的时间都消耗在资料收集和格式调整上。直到发现OpenClawGLM-4.7-Flash这个组合ÿ…...
图灵奖得主LeCun团队悄然引动世界模型革新!世界模型终于不崩了!48倍加速!15M参数单GPU端到端训练!自发涌现物理理解!
近日,杨立昆与其团队在新发布的论文《LeWorldModel:基于像素的稳定端到端联合嵌入预测架构》中,介绍了一种新的世界模型LeWorldModel(LeWM) ,这一模型可以端到端的训练,无需任何技巧,同时拥有15M参数、能在…...
机器视觉C# 调用相机:从 USB 摄像头到海康工业相机(WinForms WPF)
🎥 机器视觉C# 调用相机:从 USB 摄像头到海康工业相机(WinForms & WPF) 📝 前言 在工业自动化、医疗影像或简单软件开发中,调用摄像头是一个绕不开的话题。在项目中同时遇到了两种需求: …...
