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



我面临以下设计问题:

  • 将有几个准备好的SQL语句,其中where -子句包含定义的约束,其中的值将根据用户输入而动态。
  • 此外,还需要一些SQL语句,可能最终会变得相当复杂,但最终产生的select(子句)仍然会非常直接。

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

  • 现在,如果用户(通过UI)将影响整个查询构造,在特定的基础上进行查询,会发生什么情况?

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

考虑到所有这些,您是否仍然选择iBatis或进行其他自定义开发作为给定上述需求的最佳体系结构?

最新版本的iBatis (MyBatis)允许我们使用强大的基于OGNL的表达式来构建动态查询。iBATIS最强大的特性之一就是它的动态SQL功能。

iBatis就可以了。我们使用iBatis完成了与您描述的完全相同的场景,根据用户在UI中的选择创建动态的特殊查询。复杂性随着可用用户元素的数量逐页增加而增加,但这是可行的。

Hibernate是一个功能齐全的ORM,这是另一个明显的选择,但使用起来更复杂。以下是一些帮助链接:

使用Hibernate的动态查询

关于Hibernate动态查询的StackOverflow问题

所以我会选择iBatis作为首选,或者Hibernate作为解决方案。我认为,由于复杂性,定制解决方案很容易变成一大堆复杂的嵌套代码,除非你首先真正考虑整个设计。当然前提是需求不会随着你的发展而改变。

我觉得iBatis将允许您在努力中更好地组织sql代码,并允许在设计上具有灵活性,以代替将来的更改。恕我直言。

我会投票给iBatis。我总是发现,如果你有复杂的SQL查询要执行(特别是一些join和sub -select),导致一个琐碎的结果集,这是最好的。

当您使用iBatis时,您可以更好地控制SQL,并且还可以帮助您与现有/遗留数据库集成。

最新更新