1

我想在 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> 

有没有办法让我完成这样的事情?

4

1 回答 1

2

文档

字符串替换

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

ORDER BY ${columnName}

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

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

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


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

于 2013-10-21T21:04:20.030 回答