Answers:
考虑一下您要实现的目标。通常,命令查询响应隔离 模型适用于复杂域。
原因是您通常尝试执行以下两项操作之一:
Hibernate在第一种情况下效果很好,允许您只创建一个POJO并持久化/更新它。除非您的域很大,否则它也会快速执行此操作。
myBatis非常适合获取查询(案例2),而您只需要一个答案。Hibernate会尝试加载整个对象图,您需要使用LazyLoading技巧开始优化查询,以使其在较大的域中正常工作。在运行甚至不返回实体对象的复杂分析查询时,这一点很重要。在这种情况下,Hibernate仅提供SqlQuery和bean变形器,并且具有BigDecimal之类的默认类型,而myBatis可以轻松映射到简单的POJO非实体。
这两种情况的区别命令要更改域数据和反应,你只是想获取一些数据。
因此,请考虑这两种情况以及您的应用程序所执行的操作。如果您有一个简单的域并且仅获取信息,请使用myBatis。如果您有一个复杂的域并保留了实体,请使用Hibernate。如果两者都做,请考虑使用混合方法。这就是我们在拥有成千上万个实体的项目中使用的东西,以使其受到控制。;)
MyBatis以SQL为中心。它会帮助您调用SQL语句并将结果(表)映射到对象树。
主要好处是它不是ORM。它不会将表映射到对象,因此不会遭受orm阻抗不匹配的情况。非常适合复杂数据库或旧数据库,或使用数据库功能(如存储过程,视图等)。
它非常简单易学,因此也适合低技能的团队,因为他们之间不需要休眠专家。
看看jpetstore 6 http://mybatis.org/spring/sample.html
首先,它源自您原始问题的上下文。在其他情况下,我可以提出不同的建议。让我建议MyBatis的要点是:
...我们遇到了一些性能问题。
我们决定放弃休眠模式,转而使用普通的Jdbc以获得数据库性能。
在过去的项目之一中,出于您所描述的原因,我们的团队一直在考虑从Hibernate迁移。与您类似,我们将切换到JDBC,但是另一个项目的同事向我们推荐了MyBatis。团队决定尝试一下,同时在出现问题的情况下保留JDBC作为备用选项。
那时,我对MyBatis一无所知,但对JDBC有足够的经验,以确保它能完成这项工作。尽管如此,我还是强烈支持尝试MyBatis的想法,主要原因是根据我过去的经验,我们必须使用JDBC编写的样板代码简直令人生畏。
无论如何,我们尝试了MyBatis,它按照广告宣传工作。这就是为什么我写了您要问的评论。
如果您希望我提供有关该技术的详细概述,或者以某种方式称赞它的优势-很抱歉,我不能这样做。如果可以的话-我已经将其写在您原来问题的单独答案中,而不是简短评论。我提到当时我对MyBatis一无所知-抱歉,我对此仍然了解甚少。从Hibernate过渡是由其他团队成员完成的,并且不会影响我一直在研究的代码。我只记得关键要点(基于我的评论),即1)MyBatis解决了我们在Hibernate中遇到的问题; 2)它没有引入自己的问题; 3)允许我们避免编写样板代码I期待如果我们切换到JDBC。就这样。