相同点:
(1)、Mytatis 与Hibernate 都是通过SessionFactoryBuider 由XML配置文件生成SessionFactory、并由SessionFactory 生成
Session, 之后由Session来开启执行事务和SQL语句。
(2)、Mybatis 和Hibernate 都封装了JDBC和JTA (即java数据库连接 和应用程序编程接口)。
(3)、两者都是基于ORM(即对象关系影射 )的思想解决了模型和数据库之间的应射问题。
不同点:
(1)、sql 方面 Mybatis 通过Mapper.xml 维护映射结果,手动编写SQL 比 Hibernate 自动生成的 hql 更加灵活,使得项目维护 更加方便, Mybatis 的SQL调优更加容易。 Hibernate 的hql 的数据库移植性更好。hibernate 在级联删除的时候效率低,数据量大或者表多的时候 ,基于关系操作会变得复杂。
(2)、缓存方便,两者都可以使用第三方缓存来节省数据库资源,Hibernate 相比 Mybatis 有更好的二级缓存机制。
--------------------------------------2019-2-1完善内容------------------------------------------------------------------------------------
两者都作为WEB项目的持久层,其实并没有绝对的论证Hibernate 和My Batis 谁好谁次,这里小伙伴门注意了,有的面试官若要问谁好谁次,要不就是故意误导你,要不就是这方面的菜鸟强装大神,一定要怼回去。任性归任性,还是要认真的做一下对比以便能加深对两者的理解。
第一方面:对开发速度的对比。
就开发而言,Hibernate要比My Batis 入门要来的难度大。My Batis 相比要更加轻量。要用好My Batis 首先要理解Hibernate。
比起两者的开发速度,不仅仅要考虑到两者的特性和性能,更要根据项目的实际开发需求去选择。比如一个项目涉及的复杂查询没有的话,只有简单的增删改查,这样选择Hibernate就比较快了,因为基本的sql 语句都已经封装好了,不需要自己去写sql,时间会节省很多。相反,如果如果设计的复杂查询太多,就适用选择My Batis ,Hibernate的sql 语句管理比较方便。
第二方面:开发工作量的对比
Hibernate 和My Batis 都有相应的代码生成工具,可以生成简单基本的DAO层方法。针对高级查询,Mybatis 需要手动编写sql语句,以及ResultMap。HIbernate 则有良好的映射机制,开发者无需关心Sql 的生成与结果映射,更加专注于业务。
第三方面:sql 优化方面
Hibernate 查询数据时会将表中所有字段查询出来,会造成一定资源的浪费,影响查询效率。虽然也可以使用自己的sql 来查询相关需要查询的字段,但是这样就破坏了Hibernate 开发的简洁性。而My Batis 是手动编写sql ,可以灵活的按需编写查询SQL。
参考资料;https://www.cnblogs.com/inspurhaitian/p/4647485.html