MyBatis编写模糊查询时使用concat函数时需注意单个字符为‘%‘和‘_‘的模糊搜索情况,MySQL函数instr()

本文探讨了在MyBatis中使用concat函数进行模糊查询时,特别关注单字符'%'和'_'的特殊含义,以及如何避免误匹配。同时介绍了MySQL instr()函数的用法,以及如何通过拦截校验来确保正确处理通配符。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

MyBatis编写模糊查询时使用concat函数时需注意单个字符为'%'和'_'的模糊搜索情况,MySQL函数instr()

concat函数

模糊查询时需要注意单个字符为'%'和'_'的情况,否则会全匹配,控制层参数需要进行相关拦截! 

模糊查询示例xml语句https://blog.csdn.net/Be_insighted/article/details/120272866?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522163776208016780271513587%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=163776208016780271513587&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_v2~rank_v29-7-120272866.pc_v2_rank_blog_default&utm_term=concat&spm=1018.2226.3001.4450icon-default.png?t=M276https://blog.csdn.net/Be_insighted/article/details/120272866?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522163776208016780271513587%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=163776208016780271513587&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_v2~rank_v29-7-120272866.pc_v2_rank_blog_default&utm_term=concat&spm=1018.2226.3001.4450

 拦截校验(如果待搜索的信息含有通配符,此方法不通!)

// 通配符数组
public static final String[] WILDCARD_CHARACTER = new String[]{"%","_"};
// 需要替换的内容
public static final String REPLACEMENT_CHARACTER= "\\";
public List<Test> getTestList(Test test){
	if(StringUtils.isNotEmpty(test.getTitle) && test.getTitle.length == 1){
		// % _ 这两个通配符都要进行替换
        if (WILDCARD_CHARACTER.contains(test.getTitle)) {
            throw new RuntimeException("你好有意思呀!");
        }	        
 
 // 或者 
 test.setTitle(StringUtils.replace(test.getTitle(),WILDCARD_CHARACTER,REPLACEMENT_CHARACTER));
	}
	return testMapper.selectTestList(Test test);
}

MySQL函数之instr()

 1)instr()函数的格式 (俗称:字符查找函数)

格式一:instr( src, dest ) ===> instr(源字符串, 目标字符串)

格式二:instr( string1, string2,start_position,nth_appearance ) ===> instr(源字符串, 目标字符串, 起始位置, 匹配序号) 解析:string2 的值要在string1中查找,是从start_position给出的数值(即:位置)开始在string1检索,检索第nth_appearance(几)次出现string2。

instr( string1, string2, start_position,nth_appearance )

参数

string1:源字符串,要在此字符串中查找。

string2:要在string1中查找的字符串 。

start_position:代表string1 的哪个位置开始查找。此参数可选,如果省略默认为1. 字符串索引从1开始。如果此参数为正,从左到右开始检索,如果此参数为负,从右到左检索,返回要查找的字符串在源字符串中的开始索引。

nth_appearance:代表要查找第几次出现的string2. 此参数可选,如果省略,默认为 1.如果为负数系统会报错。

注:在Oracle/PLSQL中,instr函数返回要截取的字符串在源字符串中的位置。只检索一次,也就是说从字符的开始到字符的结尾就结束。

MySQL中的常用的三个通配符

  1. %:用来表示任意多个字符,包含0个字符

  2. _ : 用来表示任意单个字符

  3. escape:用来转义特定字符(使用escape,转义字符后面的%或_就不作为通配符了,注意前面没有转义字符的%和_仍然起通配符作用)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值