MyBatis like 语句的使用
其实严格来说这个问题都不应该归类为 MyBatis 的问题,这个问题的本质是数据库字符串的拼接问题,不同的数据库的字符串拼接方式是不一样的。比如 MySQL 是通过 CONCAT 函数来实现拼接的,Oracle 可以通过 ‘||’来拼接字符串。
所以如果你是 MySQL 数据库,可以通过如下的方式来实现 like 语句。
<!-- 根据条件获取学生信息-->
<select id="listByConditions" parameterType="studentQuery" resultMap="BaseResultMap">
select
<include refid="Base_Column_List" />
from t_student
<where>
<if test="ids != null and ids.size() > 0">
AND id IN
<foreach collection="ids" item="item" open="(" close=")" separator=",">
#{item}
</foreach>
</if>
<if test="name != null and name != ''">
AND name LIKE CONCAT('%', #{name}, '%')
</if>
<if test="sex != null">
AND sex = #{sex}
</if>
<if test="selfcardNo != null">
AND selfcard_no = #{selfcardNo}
</if>
</where>
</select>
网上还有通过 ‘%${name}%’,这种方式存在 SQL 注入的问题,不建议采用,我也没有测试过。
作者:殷建卫 链接:https://www.yuque.com/yinjianwei/vyrvkf/ran9qg 来源:殷建卫 - 架构笔记 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。