概述
问题
今天遇到一个线上BUG,Mybatis的映射XML文件中sql语句写法有问题,写法如下:
SELECT * FROM TBL_FIN_RETURN_DEBT WHERE ORDER_NO LIKE 'OT61981371212542_%'
该功能的本意是下划线_不作为通配符使用,但是实现该功能的同事忽略了该问题,导致会查出订单号以OT61981371212542开头的退款单。
解决问题
修改Mybatis的映射xml文件如下:
SELECT * FROM TBL_FIN_RETURN_DEBT
<trim prefix=" where ">
<choose>
<!-- 如果我就真的要查%或者_,怎么办呢?
使用escape,转义字符后面的%或_就不作为通配符了,
注意前面没有转义字符的%和_仍然起通配符作用,Sql代码
select username from gg_user where username like '%xiao/_%' escape '/'; -->
<when test="flag != null and flag != ''">
<![CDATA[
AND ORDER_NO LIKE
'${orderNo}/_%' ESCAPE '/' ]]>
</when>
<otherwise>
AND ORDER_NO = #{orderNo}
</otherwise>
</choose>
</trim>
扩展知识
MySql的like语句中的通配符:百分号%、下划线_的运用
百分号%代表任意多个字符
sql代码:
select * from A where a like 'sully%';
下划线_代表一个字符
sql代码:
select * from A where a like 'sully_';
百分号%、下划线_不转义
如果我就真的要查%或者,怎么办呢?使用escape,转义字符后面的%或就不作为通配符了,注意前面没有转义字符的%和_仍然起通配符作用
Sql代码:
select * from A where a like '%sully/_%' escape '/';
select * from A where a like '%sully/%%' escape '/';
最后
以上就是健壮萝莉为你收集整理的Mybatis的sql语句中下划线_,百分号%的处理的全部内容,希望文章能够帮你解决Mybatis的sql语句中下划线_,百分号%的处理所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复