当前位置 博文首页 > 龚厂长的博客:mybatis使用like模糊查询的几种方式
方式一
在mapper文件或者注解中使用LIKE '%${substring}%'
。
这种方式使用简单,但是无法防止SQL注入,不推荐使用。
方式二
使用LIKE #{substring}
,或者LIKE #{substring,jdbcType=VARCHAR}
,这种方式需要在代码里面加上百分号。
可以防止SQL注入。
使用MybatisGenerator自动生成的mapper文件中,like也是使用方式二实现的。
方式三
使用CONCAT()函数拼接。
比如可以在mapper文件中按照如下方式编写:
<select id="findUserByLikeName" parameterType="java.lang.String" resultType="User">
select * from user where name like concat('%',#{name,jdbcType=VARCHAR},'%')
</select>
该方式也可以防止SQL注入。
方式四
使用bind标签。bind标签可以从OGNL表达式中创建一个变量并将其绑定到上下文。
<select id="findUserByLikeName" parameterType="User" resultType="User">
<bind name="pattern" value="'%' + name+ '%'" />
SELECT * FROM user WHERE name like #{pattern}
</select>
该方式也可以防止SQL注入。
使用上述这些方式做模糊查询的时候,注意字符串中的关键字,如果模糊查询的字段中包含关键字,需要在代码中转义。比如“%”,假设需要使用模糊查询出包含“%”的记录,那么需要在代码里面对“%”完成转义。
cs