Mybatis的如何根据下划线_,百分号%模糊查询---escape的作用

在Mybatis中,使用LIKE进行模糊查询时,%和_被视为特殊字符。要进行转义处理,可以使用ESCAPE关键字指定转义字符,如`escape '/'`,使得%和_被当作普通字符。在实际应用中,结合MybatisPlus,需要注意转义字符的使用和写法,例如like CONCAT('%', #{param}, '%')等。" 112050942,10535903,OEM项目标准化管理流程详解,"['项目管理', 'OEM', '流程标准化', '供应链管理', '质量管理']

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

在使用mybatis的模糊查询时,有两个特殊符号需要注意:

%:相当于任意多个字符;

_:相当于任意的单个字符;

我们需要对特殊字符进行转义,如:

public static String escapeChar(String before){
   if(!ObjectUtils.isEmpty(before)){
   		 before = before.replaceAll("/", "//") ;
		 before = before.replaceAll("_", "/_") ;
		 before = before.replaceAll("%", "/%") ;
 }
   return before ;
}

       但我们在使用LIKE关键字进行模糊查询时,“%”、“”单独出现时,会被认为是通配符,且上面我们对下划线和百分号进行转义过就查不出来了,该怎么办?为了在字符数据类型的列中查询是否存在百分号 (%)、下划线(),就需要有一种方法将LIKE判式中的这些字符看作是实际值,而不是通配符。关键字 ESCAPE允许确定一个转义字符将紧跟在转义字符之后的字符看作是实际值。

使用escape来定义转义符。如:

select * from A where a like '%sully/_%' escape '/';   
select * from A where a like '%sully/%%' escape '/'; 

escape ‘/’ 指用’/'说明后面的%或_就不作为通配符而是普通字符了,注意前面没有转义字符的%仍然起通配符作用
结合mybatisplus

if(ObjectUtils.isNotEmpty(name)){
  name = SQLEscapeUtil.escapeChar(name);
  wrapper.andNew("name like '%'||'" + name + "'||'%' escape '/'");
}

注意这里的空格和单引号都要是英文。

  • 模糊查询的三种常用写法: like concat(’%’,#{param},’%’) 或者 like ‘%${param}%’ ,还有就是上面那种 like ‘%’ || #{param} || ‘%’。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值