先说遇到的问题:在MyBatis中,经常会用到模糊查询,在自动生成的代码中Example中,无法满足要求的情况下,就需要在XML中增加自定义的SQL,在XML中编写SQL时关注单引号与双引号有两个地方需要注意;
第一个:if条件判断中,test 条件用双引号,条件判断中,需要判断字符非空的用null 与单引号;例:
<if test="params.name != null and params.name != ''"></if>
第二个:查询条件中,like 查询,分三条叙述:下面贴代码
1、错误的写法,这样写是查不到数据的
AND name like '%'#{params.name}'%'
2、正确的写法,直接使用 like关键字查询,前后的%号一定要用英文半角双引号引起来,没用试过不引起来会是什么效果
AND name like "%"#{params.name}"%"
3、模糊查询的另一种写法,使用concat() 关键查询,同样上代码
AND name like concat('%', #{params.name}, '%')
或
AND name like concat('%', #{params.name})
下面是正确写法的总结:一种是直接使用 like 关键字,另一种是使用 concat()函数
<if test="params.name != null and params.name != ''">
AND name like "%"#{params.name}"%"
</if>
或
<if test="params.name != null and params.name != ''">
AND name like concat('%', #{params.name}, '%')
</if>
结语:建议大家使用concat() 函数,效率较 like稍高
最后说,欢迎大家纠错和指正