使用MyBatis动态选择SQL语句

时间:2013-10-21 16:56:38

标签: java sql oracle mybatis ibatis

我想在Oracle 12g数据库中使用mybatis获取动态sql语句,我可以利用哈希映射添加条件,如下所示:

<select id="getUsers" resultType="hashmap" parameterType="hashmap"> 
  select * 
  from users 
  <where> 
  <iterate var="i=0" increment> 
    ${columni} like #{valuei} 
  </iterate> 
  </where> 
</select> 

我有办法完成类似的事吗?

1 个答案:

答案 0 :(得分:2)

来自documentation

  

字符串替换

     

默认情况下,使用#{}语法将导致MyBatis生成PreparedStatement属性,并根据PreparedStatement参数(例如?)安全地设置值。虽然这更安全,更快速且几乎总是首选,但有时您只想将未修改的字符串直接注入SQL语句。例如,对于ORDER BY,您可以使用以下内容:

     

ORDER BY ${columnName}

     

这里MyBatis不会修改或转义字符串。

这允许您例如将列名作为参数传递给查询等。

请记住始终清理您直接粘贴到SQL的数据。


如果您需要为WHERE子句生成多个条件,请在<where>内使用<foreach>标记。请注意<foreach>具有允许指定分隔符,开始/结束字符串等的高级属性。结合我之前提到的${}符号,可以构造动态WHERE子句。有关示例,请参阅this answer