因此,我正在一个项目(JSF2,Spring3核心,MVC,Webflow,MyBatis3,RichFaces和一个传统的Oracle 10g)。我所有麻烦的来源都与数据库的设计有关。问题是大多数数据库表格都有变化的模式(可能是坏设计?)。所以我需要能够支持除去额外列的&。需要帮助,使MyBatis可怕的数据库设计工作
为了适应这种情况,我使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';
我已经尝试了自定义类型处理器,但的setParameter()不给我足够的访问做什么,我需要的。 ResultHandler没有给我足够的访问权限,所以我也不能使用它。
现在我知道我可以做一些像Obj.createUpdateSqlString()这样的东西,并将它作为一个文字字符串插入到映射器中,但这有点破解,让我打开SQL注入。更不用说,这将涉及逃避大量的字符串,并且考虑到各种可能的输入,并且除非涵盖所有可能性,这为一些严重错误打开了大门。
那么有没有一个确定的方法来做到这一点?或者至少有一半体面的方式?我听说一些铁杆MyBatis的倡导者说,他们还没有遇到MyBatis无法妥善处理的情况;所以MyBatis的专家,请帮助我!
我最近得出了同样的结论,但不幸的是,MyBatis早在这个项目中就已经指定了,现在我们无法为了某些荒谬的原因而改变它(或者任何其他的库)。你不喜欢企业官僚机构吗? – Stoney 2010-12-06 20:21:30
@Stoney,'不能改变'通常只是成本的一个函数 - 如果你真的可以向右耳证明考虑到所有成本(*所有*内部和外部依赖关系),你可以实现更小的目标你会惊讶什么可以改变。另一方面,如果现在它变得更加昂贵,你就不得不将它赶出去(另一方面,如果是官僚主义的,你的意思是你选择不这样做,因为这样的成本分析会让你处于一个糟糕的境地,因为等级,那么......那么我不会告诉你任何新东西,所以忽略整个评论) – Unreason 2010-12-06 20:33:32