所以我正在做一个项目(JSF2、Spring3 Core、MVC、Webflow、MyBatis3、RichFaces 和遗留的 Oracle 10g)。我所有麻烦的根源都与数据库的设计有关。问题是大多数数据库表都有不断变化的架构(也许是糟糕的设计?)。所以我需要能够支持额外列的添加和删除。

为了适应这一点,我让 MyBatis 将数据提取到一个自定义的“通用”域对象中,它基本上只是扩展了一个 hashmap。我当前的问题是更新这些 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() 之类的操作并将其作为文字字符串插入到映射器中,但这有点麻烦,让我容易受到 SQL 注入(inject)的影响。更不用说这将涉及转义大量字符串,并考虑各种可能的输入,除非涵盖所有可能性,否则会为一些严重的错误打开大门。

那么有没有一个既定的方法来做到这一点?或者至少是中途体面的方式?我听过一些 MyBatis 的铁杆拥护者说他们还没有遇到过 MyBatis 无法优雅处理的情况;所以 MyBatis 专家,请帮帮我!!

请您参考如下方法:

MyBatis 或 Hibernate 都有疯狂的数据库方案。我只会使用 SpringJDBC 或类似的。

不要试图让一个圆钉适合一个方孔,即使它是一个非常好的圆钉。


评论关闭
IT源码网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!