Mybatis与Hibernate区别

之前没怎么用过mybatis,只知道与hibernate同样是个orm数据库框架。随着使用熟练度的增长,发现它与hibernate区别是很是大的,结合至今为止的经验,总结出如下几点:

1. hibernate是全自动,而mybatis是半自动。
hibernate彻底能够经过对象关系模型实现对数据库的操做,拥有完整的JavaBean对象与数据库的映射结构来自动生成sql。而mybatis仅有基本的字段映射,对象数据以及对象实际关系仍然须要经过手写sql来实现和管理。

2. hibernate数据库移植性远大于mybatis。
hibernate经过它强大的映射结构和hql语言,大大下降了对象与数据库(oracle、mysql等)的耦合性,而mybatis因为须要手写sql,所以与数据库的耦合性直接取决于程序员写sql的方法,若是sql不具通用性而用了不少某数据库特性的sql语句的话,移植性也会随之下降不少,成本很高。

3. hibernate拥有完整的日志系统,mybatis则欠缺一些。
hibernate日志系统很是健全,涉及普遍,包括:sql记录、关系异常、优化警告、缓存提示、脏数据警告等;而mybatis则除了基本记录功能外,功能薄弱不少。

4. mybatis相比hibernate须要关心不少细节
hibernate配置要比mybatis复杂的多,学习成本也比mybatis高。但也正由于mybatis使用简单,才致使它要比hibernate关心不少技术细节。mybatis因为不用考虑不少细节,开发模式上与传统jdbc区别很小,所以很容易上手并开发项目,但忽略细节会致使项目前期bug较多,于是开发出相对稳定的软件很慢,而开发出软件却很快。hibernate则正好与之相反。可是若是使用hibernate很熟练的话,实际上开发效率丝绝不差于甚至超越mybatis。

5. sql直接优化上,mybatis要比hibernate方便不少
因为mybatis的sql都是写在xml里,所以优化sql比hibernate方便不少。而hibernate的sql不少都是自动生成的,没法直接维护sql;虽有hql,但功能仍是不及sql强大,见到报表等变态需求时,hql也歇菜,也就是说hql是有局限的;hibernate虽然也支持原生sql,但开发模式上却与orm不一样,须要转换思惟,所以使用上不是很是方便。总之写sql的灵活度上hibernate不及mybatis。

总结:
mybatis:小巧、方便、高效、简单、直接、半自动
hibernate:强大、方便、高效、复杂、绕弯子、全自动

mybatis:
1. 入门简单,即学即用,提供了数据库查询的自动对象绑定功能,并且延续了很好的SQL使用经验,对于没有那么高的对象模型要求的项目来讲,至关完美。
2. 能够进行更为细致的SQL优化,能够减小查询字段。
3. 缺点就是框架仍是比较简陋,功能尚有缺失,虽然简化了数据绑定代码,可是整个底层数据库查询实际仍是要本身写的,工做量也比较大,并且不太容易适应快速数据库修改。
4. 二级缓存机制不佳。
hibernate:
1. 功能强大,数据库无关性好,O/R映射能力强,若是你对Hibernate至关精通,并且对Hibernate进行了适当的封装,那么你的项目整个持久层代码会至关简单,须要写的代码不多,开发速度很快,很是爽。
2. 有更好的二级缓存机制,可使用第三方缓存。
3. 缺点就是学习门槛不低,要精通门槛更高,并且怎么设计O/R映射,在性能和对象模型之间如何权衡取得平衡,以及怎样用好Hibernate方面须要你的经验和能力都很强才行。
举个形象的比喻:
mybatis:机械工具,使用方便,拿来就用,但工做仍是要本身来做,不过工具是活的,怎么使由我决定。
hibernate:智能机器人,但研发它(学习、熟练度)的成本很高,工做均可以摆脱他了,但仅限于它能作的事。
hibernate, sql语句, oracle, 数据库, 程序员
相关帖子
认识对象数据库与关系数据库之间的区别【分享】hibernate 查询的几个知识点请教hibernate 查找问题javascript中apply与call的区别hibernate悲观锁和乐观锁问题用java链接sqlserver数据库时候几个jar包的区别for和foreach的区别android sdk全部版本区别java中throws和throw的区别和用法
javascript

相关文章
相关标签/搜索