我想在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>
我有办法完成类似的事吗?
答案 0 :(得分:2)
字符串替换
默认情况下,使用
#{}
语法将导致MyBatis生成PreparedStatement属性,并根据PreparedStatement参数(例如?
)安全地设置值。虽然这更安全,更快速且几乎总是首选,但有时您只想将未修改的字符串直接注入SQL语句。例如,对于ORDER BY
,您可以使用以下内容:
ORDER BY ${columnName}
这里MyBatis不会修改或转义字符串。
这允许您例如将列名作为参数传递给查询等。
请记住始终清理您直接粘贴到SQL的数据。
如果您需要为WHERE
子句生成多个条件,请在<where>
内使用<foreach>
标记。请注意<foreach>
具有允许指定分隔符,开始/结束字符串等的高级属性。结合我之前提到的${}
符号,可以构造动态WHERE
子句。有关示例,请参阅this answer。