版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_30038111/article/details/84794137
通常我们使用like concat
拼接模糊查询的字符串,但是如果用户输入_
下划线,那么模糊查询的条件为like %_%
,此时_
下划线会被当做通配符,所以模糊查询就会出现问题。
<select id="findForGuestInfo" parameterType="java.lang.String" >
SELECT user_id, NAME, sex FROM tb_pms_user WHERE name like concat('%',#{name,jdbcType=VARCHAR},'%')
</select>
解决方法一:
使用mysql
的INSTR
函数代替LIKE
<select id="findForGuestInfo" parameterType="java.lang.String" >
SELECT user_id, NAME, sex FROM tb_pms_user WHERE INSTR( name ,#{nickname,jdbcType=VARCHAR})
</select>
解决方法二(参数中的每个特殊字符前追加\
):
Java
代码中判断字段是否有特殊字符,然后在每个特殊字符前追加\
进行特殊字符的转义,例如用户输入_
,追加后为\_
这样就可以避免mysql
把参数当做通配符。但是这种方式,需要在每个特殊字符前追加\
进行特殊字符的转义。
<select id="findForGuestInfo" parameterType="java.lang.String" >
SELECT user_id, NAME, sex FROM tb_pms_user WHERE name like concat('%',#{name,jdbcType=VARCHAR},'%')
</select>