Mybatis的sql语句中下划线_,百分号%的转义处理---escape的作用

综述

        在使用LIKE关键字进行模糊查询时,“%”、“_”和“[]”单独出现时,会被认为是通配符。为了在字符数据类型的列中查询是否存在百分号 (%)、下划线(_)或者方括号([])字符,就需要有一种方法进行转义

思路

解决办法---使用ESCAPE定义转义符

        在使用LIKE关键字进行模糊查询时,“%”、“_”和“[]”单独出现时,会被认为是通配符。为了在字符数据类型的列中查询是否存在百分号 (%)、下划线(_)或者方括号([])字符,就需要有一种方法告诉DBMS,将LIKE判式中的这些字符看作是实际值,而不是通配符。关键字 ESCAPE允许确定一个转义字符,告诉DBMS紧跟在转义字符之后的字符看作是实际值。

如下面的表达式:

        LIKE '%M%' ESCAPE ‘M' 

        使用ESCAPE关键字定义了转义字符“M”,告诉DBMS将搜索字符串“%M%”中的第二个百分符(%)作为实际值,而不是通配符。当然,第一个百分符(%)仍然被看作是通配符,因此满足该查询条件的字符串为所有以%结尾的字符串。
类似地,下面的表达式:

        LIKE  'AB&_%'   ESCAPE  ‘&'

        此时,定义了转义字符“&”,搜索字符串中紧跟“&”之后的字符,即“_”看作是实际字符值,而不是通配符。而表达式中的“%”,仍然作 为通配符进行处理。该表达式的查询条件为以“AB_”开始的所有字符串。

实例

escape 是sql中的关键字,定义转义字符。如下:


SELECT * FROM student t where t.name like '%/%' escape '/';执行结果为:


SELECT * FROM student t where t.name like '%%' escape '/';执行结果为:



由此可见,escape '/' 是指用'/'说明在/后面的字符不是通配符,而是普通符。

即第一个sql语句中的第二个%是普通字符,找的是最后一个字符为%的名字的记录。

 扩展

  • mybatis like 模糊查询的集中常见方式

1.  参数中直接加入%%

  param.setUsername("%CD%");
      param.setPassword("%11%");

	<select  id="selectPersons" resultType="person" parameterType="person">
		select id,sex,age,username,password from person where true 
			<if test="username!=null"> AND username LIKE #{username}</if>
			<if test="password!=null">AND password LIKE #{password}</if>
	
	</select>

2.  bind标签

    <select id="selectPersons" resultType="person" parameterType="person">
        <bind name="pattern" value="'%' + _parameter.username + '%'" />
        select id,sex,age,username,password 
        from person
        where username LIKE #{pattern}
    </select>

 

3. CONCAT

    where username LIKE concat(concat('%',#{username}),'%')
 


mybatis 中不同数据库的sql拼接方式

  1. <if test="companyName != null and companyName != ''">  
  2.    AND a.company_name LIKE   
  3.    <if test="dbName == 'oracle'">'%'||#{companyName}||'%' ESCAPE '/'</if>  
  4.    <if test="dbName == 'mssql'">'%'+#{companyName}+'%'</if>  
  5.    <if test="dbName == 'mysql'">concat('%',#{companyName},'%')</if>  
  6. </if>  


  • 7
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值