MyBatis like 语句的使用

其实严格来说这个问题都不应该归类为 MyBatis 的问题,这个问题的本质是数据库字符串的拼接问题,不同的数据库的字符串拼接方式是不一样的。比如 MySQL 是通过 CONCAT 函数来实现拼接的,Oracle 可以通过 ‘||’来拼接字符串。

所以如果你是 MySQL 数据库,可以通过如下的方式来实现 like 语句。

  1. <!-- 根据条件获取学生信息-->
  2. <select id="listByConditions" parameterType="studentQuery" resultMap="BaseResultMap">
  3. select
  4. <include refid="Base_Column_List" />
  5. from t_student
  6. <where>
  7. <if test="ids != null and ids.size() > 0">
  8. AND id IN
  9. <foreach collection="ids" item="item" open="(" close=")" separator=",">
  10. #{item}
  11. </foreach>
  12. </if>
  13. <if test="name != null and name != ''">
  14. AND name LIKE CONCAT('%', #{name}, '%')
  15. </if>
  16. <if test="sex != null">
  17. AND sex = #{sex}
  18. </if>
  19. <if test="selfcardNo != null">
  20. AND selfcard_no = #{selfcardNo}
  21. </if>
  22. </where>
  23. </select>

网上还有通过 ‘%${name}%’,这种方式存在 SQL 注入的问题,不建议采用,我也没有测试过。

作者:殷建卫 链接:https://www.yuque.com/yinjianwei/vyrvkf/ran9qg 来源:殷建卫 - 架构笔记 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。