Hibernate与Mybatis的区别

257 0
Hibernate可以调用已有的方法(好像也可以自己封装)对数据库进行操作,不用自己写sql语句,会自己生成sql语句执行。当然在使用之前需要在hibernate.cfg.xml中配置配置数据库连接信息,以及xxx.hbm.xml文件中配置POJO类(Plain Ordinary Java Object:简单的java对象)到数据库表的映射关系。

应用场景:适用需求变化不多的中小型项目,比如:后台管理系统,erp,orm,oa等(简单的增删查找)

Mybatis是配置好了数据库连接文件后,是需要在映射文件中自己写sql语句,select的resultType(返回类型)可以是一个POJO类,也是在映射文件中写delete,update,都是通过调用接口中的方法实现执行相应的sql语句。

应用场景:适用需求变化较多的项目,比如:互联网项目。(自己写sql语句可以是复杂的sql语句)  

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

  3.  sql直接优化上,mybatis要比hibernate方便很多
  4. 由于mybatis的sql都是写在xml里,因此优化sql比hibernate方便很多。而hibernate的sql很多都是自动生成的,无法直接维护sql。

  5. MyBatis容易掌握,而Hibernate门槛较高。
  6.  hibernate拥有完整的日志系统,mybatis则欠缺一些
  7. hibernate日志系统非常健全,涉及广泛,包括:sql记录、关系异常、优化警告、缓存提示、脏数据警告等;而mybatis则除了基本记录功能外,功能薄弱很多。

  8. Hibernate的DAO层开发比MyBatis简单,Mybatis需要维护SQL和结果映射。
  9. Hibernate对对象的维护和缓存要比MyBatis好,对增删改查的对象的维护要方便。
  10. Hibernate数据库移植性很好,MyBatis的数据库移植性不好,不同的数据库需要写不同SQL。
  11. hibernate通过它强大的映射结构和hql语言,大大降低了对象与数据库(oracle、mysql等)的耦合性,而mybatis由于需要手写sql,因此与数据库的耦合性直接取决于程序员写sql的方法,如果sql不具通用性而用了很多某数据库特性的sql语句的话,移植性也会随之降低很多,成本很高

  12. Hibernate有更好的二级缓存机制,可以使用第三方缓存。MyBatis本身提供的缓存机制不佳。

mybatis:小巧、方便、高效、简单、直接、半自动

hibernate:强大、方便、高效、复杂、绕弯子、全自动    

发表评论