Hibernate OR MyBatis,How can I choose?

来源:互联网 发布:网络电视机顶功能 编辑:程序博客网 时间:2024/06/05 07:04

Question

java开发中,DAO层的框架最常用的莫过于Hibernate和MyBatis。这两种都是很优秀的ORM框架。存在既有必要性,有市场就有需求。那么,什么场景下适合用哪个框架呢?基于我自己的使用和理解,给出我自己的见解。

About Hibernate And MyBatis

本来想着单独说说Hibernate和MyBatis的,然后仔细一想,分开说,看不出来两者的区别,所以干脆一起说说。

众所周知,开发项目时,需求确定,系统分析完毕后,第一步做的事情,就是数据库的设计。所以,我也从这第一步,说说这两个框架的区别。用Hibernate开发时,数据库设计基本上我就很少动用SQL语句了。因为Hibernate的强大的关系/对象的映射功能,我基本上都是直接设计开发Model类,然后字段的列名,列属性,表名,表关联(用Hibernate似乎如果不用表关联就是去了它的查询的强大优势了)什么的,都用Annotation直接配置,然后项目一启动,啥都OK了。然后数据库操作,DAO层一切都搞定,只要列名设计的合理,就算数据库换了也没关系,这就是Hibernate的跨数据库的优势,感觉跟JAVA的跨平台的理念很像啊,呵呵。而用MyBatis开发时,那么我就必须要老老实实的从最基本的数据库开始设计了,设计表结构,然后写建表语句,然后执行建表SQL,然后用MyBatis Generator生成dataobject,mapper xml,mapper dao class,然后导入到项目里面去开始使用。DAO层由dao class 和 mapper xml来控制,由于所有的SQL语句都是在xml文件中配置,所以自定义化程度很高,操作很透明啦。说到这,我想补充一下,从另外一个习惯,如果表结构要求有表之间的外键关联,那么我会倾向于Hibernate,如果反之,我会倾向于MyBatis。

然后就是开发了。如果是添加新的dao操作,Hibernate只需要添加一个dao方法就ok了,而且Hibernate还会把实体之间的级联都可以查出来,只要是在session范围内,model的查询操作很方便,就是JAVA之间的对象调用就行了。若是MyBatis,则首先要编写xml的sql配置,然后写DAO的class方法,至于返回的对象,就只能是查什么返回什么了,不过可以自定义返回的列,这点比Hibernate方便。所以从这点,MyBatis要复杂点,但是比Hibernate个性化要高。如果是需求变更,需要进行查询修改操作,这个MyBatis就比Hibernate方便了。Hibernate需要改变class类,需要重新编译。而MyBatis只需要修改一下xml配置文件就行了。

其他的细节方面,比如Hibernate的缓存机制,日志,数据库操作性能什么的功能性方面就不进行对比了,因为Hibernate框架的功能全,这是众所周知的,这方面没必要跟MyBatis进行相比了,因为这个从框架的设计理念开始时就已经决定了。

Final 适合才是最好的

最后自我总结一下。

  • 如果项目的需求变化多,并且对数据的性能要求高,扩展性要求高,用MyBatis,如互联网应用基本大都是用MyBatis框架的。
  • 如果是大型的企业化应用,大都是用Hibernate,如ERP系统,因为对数据库表的结构完整性,数据的安全性等有要求,性能,响应要求不高。
  • 至于开发,这个就是每个程序员的自我因素了。Hibernate框架很大,学习成本比MyBatis高很多,但是Hibernate的思想,是很不错的。会Hibernate然后开发MyBatis,绝对是很爽的。

    以上就是我自己的感触了,欢迎各位看官给出意见。集思广益嘛,交流才会有进步。

1 0