我面临以下设计问题:
据我所知,iBatis符合这些要求。
准备好的语句不能这样做,因为整个WHERE子句是动态的,我们甚至可能在SQL函数中内置聚合子句甚至子选择。
考虑到所有这些因素,您是否仍然可以选择iBatis或进行其他定制开发作为满足上述要求的最佳架构?
答案 0 :(得分:3)
最新版本的iBatis(MyBatis)允许我们使用强大的基于OGNL的表达式来构建动态查询。 iBATIS最强大的功能之一就是它的动态SQL功能。
答案 1 :(得分:2)
iBatis会在这种情况下工作。我们使用iBatis创建了完全相同的场景,根据UI中的用户选择创建动态的adhoc查询。随着可用的用户元素数量逐页增加,出现了复杂性,但它是可行的。
Hibernate是一个功能齐全的ORM,是另一个明显的选择,但它使用起来更复杂。以下是一些帮助链接:
Dynamic Queries with Hibernate
StackOverflow question on Dynamic Queries with Hibernate
所以我会选择iBatis作为首选,或者将Hibernate作为解决方案。我认为,由于复杂性,定制解决方案很容易变成大量复杂的嵌套代码,除非您真正考虑整个设计。当然假设要求不会随着你的变化而改变。
我觉得iBatis可以让你更好地组织sql代码,并允许设计的灵活性代替未来的变化。恕我直言。
答案 2 :(得分:1)
我会投票支持iBatis。如果您要执行复杂的SQL查询(特别是许多JOIN和SUB选择),我总是发现它最好,这会导致一个简单的结果集。
使用iBatis时,您可以更好地控制SQL,还可以帮助您与现有/旧数据库集成。