iBatis是动态SQL查询的正确选择吗?

时间:2011-09-21 18:06:33

标签: java sql ibatis

我面临以下设计问题:

  • 将有几个准备好的SQL语句,其中WHERE子句包含定义的约束,其中值将是动态的,基于用户输入。
  • 此外,还需要一些可能最终非常复杂的SQL语句,但最终的SELECT子句仍然非常简单。

据我所知,iBatis符合这些要求。

  • 现在,在用户(通过用户界面)会影响完整查询构建,以特定方式进行查询的情况下会发生什么?

准备好的语句不能这样做,因为整个WHERE子句是动态的,我们甚至可能在SQL函数中内置聚合子句甚至子选择。

考虑到所有这些因素,您是否仍然可以选择iBatis或进行其他定制开发作为满足上述要求的最佳架构?

3 个答案:

答案 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,还可以帮助您与现有/旧数据库集成。