两个定位不一样,简单来说,Hibernate更加希望你不要关心sql,通过annoation,通过DTO设计来完成实际的sql语句生成。
而mybatis只是通过xml或者annotation规范了DTO与SQL间的关联性,但不会自动生成sql,你的sql要不写在annotation中要不写在xml中。
目前的情况是:
国内用MyBatis和ibatis的多,因为主要是几个大的公司用,如阿里,从这些公司出去的人就会带着大家一起用,MyBatis(ibatis)的好处是很灵活轻量,但封装的没Hibernate好;
国外用Hibernate的多,虽然Hibernate比较重,但国外的人力开发成本高,用Hibernate一天搞定的事,MyBatis可能需要三天,所以国外用Hibernate多;
两个工具都很好,只是重点在于你想去哪工作,就选择哪个;
他人的总结
Hibernate功能强大,数据库无关性好,O/R映射能力强,如果你对Hibernate相当精通,而且对Hibernate进行了适当的封装,那么你的项目整个持久层代码会相当简单,需要写的代码很少,开发速度很快,非常爽。
Hibernate的缺点就是学习门槛不低,要精通门槛更高,而且怎么设计O/R映射,在性能和对象模型之间如何权衡取得平衡,以及怎样用好Hibernate方面需要你的经验和能力都很强才行。
iBATIS入门简单,即学即用,提供了数据库查询的自动对象绑定功能,而且延续了很好的SQL使用经验,对于没有那么高的对象模型要求的项目来说,相当完美。
iBATIS的缺点就是框架还是比较简陋,功能尚有缺失,虽然简化了数据绑定代码,但是整个底层数据库查询实际还是要自己写的,工作量也比较大,而且不太容易适应快速数据库修改。
个人理解:
大中项目,很规范的,多表联合查询相对少的,速度要快的,选H,
中小项目,上手简单的,SQL文比较复杂的,有可能会多次改动的,选M
如果 还在用Hibernate, 换成 MyBatis 吧,更灵活。用的更广泛
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。