Mybatis like模糊查询遇到的坑

版权声明:本文为博主原创文章,未经博主允许不得转载。 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>

在这里插入图片描述

解决方法一:
使用mysqlINSTR函数代替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>

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_30038111/article/details/84794137
今日推荐