所以我正在开发一个项目(JSF2、Spring3 Core、MVC、Webflow、MyBatis3、RichFaces 和旧版 Oracle 10g)。我所有麻烦的根源都与数据库的设计有关。问题是大多数数据库表的架构都在变化(也许设计不好?)。所以我需要能够支持额外列的添加和删除。
为了适应这一点,我让 MyBatis 将数据拉入一个自定义的“通用”域对象,该对象基本上只是扩展了一个 hashmap。我当前的问题是更新这些哈希图对象。应该有办法让它工作,但我似乎可以让 MyBatis 合作。我试过使用 HashMap.entrySet() & MyBatis's ,但无济于事。例如。
UPDATE MYTABLE
SET
<foreach collection="entries" index="i" item="entry" close="" open="" separator=", ">
#{entry.key} = #{entry.value}
</foreach>
WHERE FOO='BAR';
我尝试了一个自定义 TypeHandler 但 setParameter() 没有给我足够的访问权限来做我需要的事情。ResultHandler 没有让我对每个单独的结果有足够的访问权限,所以我也不能使用它。
现在我知道我可以做一些类似 Obj.createUpdateSqlString() 的事情并将其作为文字字符串插入映射器,但这有点 hack 并且让我对 SQL 注入持开放态度。更不用说这将涉及转义大量字符串,并考虑各种可能的输入,除非涵盖所有可能性,否则会为一些严重的错误打开大门。
那么有没有既定的方法来做到这一点?或者至少是一种体面的方式?我听过一些 MyBatis 的铁杆拥护者说他们还没有遇到过 MyBatis 无法优雅处理的情况;所以MyBatis专家,请帮帮我!