冬眠 VS 伊巴蒂斯 [已关闭]

对于我们的新产品重新设计,我们正在从Java中选择最好的框架。由于考虑的是模型的数据库不可知方法,我们正在研究Struts + Spring与iBATIS或Hibernate之间的选项。请建议哪个是最好的,因为两者都提供持久性。


答案 1

iBATIS和Hibernate是完全不同的野兽。

我倾向于这样看待它:如果你的视图更以对象为中心,Hibernate的效果会更好。但是,如果您认为它更以数据库为中心,那么iBATIS是一个更强大的选择。

如果您完全控制架构并且没有极高的吞吐量要求,那么Hibernate可以很好地工作。对象模型提供了相当方便的代码,但成本很高

如果您正在处理“遗留”数据库模式,您需要编写相当复杂的SQL查询,那么iBATIS可能会更好地工作。

HQL(休眠查询语言)是你必须学习的另一种语言,即使这样,你也可能会发现你仍然需要编写SQL的情况。更重要的是,您可能会花半天时间弄清楚XML,属性,注释等的正确组合,以使Hibernate生成高性能的SQL查询。

这个问题没有普遍的“A比B好”的答案。


答案 2

想想你想要实现的目标。通常,命令查询响应隔离模型适用于复杂域。

原因是您尝试执行以下两项操作之一:

  1. 创建/更新/删除一些复杂的域实体
  2. 运行分析提取查询(即求和/聚合查询)

Hibernate适用于情况1,允许您制作一个POJO并持久化/更新它。它也可以快速完成此操作,除非您的域非常大。

myBatis非常适合获取查询(案例2),您只需要一个答案。Hibernate将尝试加载整个对象图,您需要开始使用LazyLoading技巧调整查询,以使其在大型域中正常工作。相反,如果您只需要一些分析POJO页面,则同一查询的myBatis实现将是微不足道的。

因此,myBatis在SELECTS上比Hibernate更快

这两种情况是要更改域数据的命令和只想获取一些数据的响应之间的区别。

因此,请考虑这两种情况以及应用程序的作用。如果你有一个简单的域名,只是获取信息,请使用myBatis。如果您有一个复杂的域并保留实体,请使用休眠。如果同时执行这两项操作,请考虑使用混合方法。这就是我们在项目上使用的东西,该项目有成千上万的实体来控制它。;)


推荐