MyBatis与Hibernate区别

背景:在中国网安的面试过程当中遇到这个问题,好长时间没用了,说不出个因此然来。
MyBatis与Hibernate区别程序员

七、Hibernate与MyBatis对比面试

7.1 相同点sql

Hibernate与MyBatis均可以是经过SessionFactoryBuider由XML配置文件生成SessionFactory,而后由SessionFactory 生成Session,最后由Session来开启执行事务和SQL语句数据库

其中SessionFactoryBuider,SessionFactory,Session的生命周期都是差很少的。Hibernate和MyBatis都支持JDBC和JTA事务处理。缓存

7.2 不一样点mybatis

(1)hibernate是全自动,而mybatis是半自动ide

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。

(6)缓存机制上,hibernate要比mybatis更好一些

MyBatis的二级缓存配置都是在每一个具体的表-对象映射中进行详细配置,这样针对不一样的表能够自定义不一样的缓存机制。而且Mybatis能够在命名空间中共享相同的缓存配置和实例,经过Cache-ref来实现。

而Hibernate对查询对象有着良好的管理机制,用户无需关心SQL。因此在使用二级缓存时若是出现脏数据,系统会报出错误并提示。

八、总结

(1)二者相同点
Hibernate和Mybatis的二级缓存除了采用系统默认的缓存机制外,均可以经过实现你本身的缓存或为其余第三方缓存方案,建立适配器来彻底覆盖缓存行为。

(2)二者不一样点
Hibernate的二级缓存配置在SessionFactory生成的配置文件中进行详细配置,而后再在具体的表-对象映射中配置是那种缓存。而MyBatis在使用二级缓存时须要特别当心。若是不能彻底肯定数据更新操做的波及范围,避免Cache的盲目使用。不然,脏数据的出现会给系统的正常运行带来很大的隐患。

(3)举个形象的比喻

MyBatis:机械工具,使用方便,拿来就用,但工做仍是要本身来做,不过工具是活的,怎么使由我决定。(小巧、方便、高效、简单、直接、半自动)

Hibernate:智能机器人,但研发它(学习、熟练度)的成本很高,工做均可以摆脱他了,但仅限于它能作的事。(强大、方便、高效、复杂、绕弯子、全自动)

相关文章
相关标签/搜索