Hibernate和MyBatis的区别

2021-10-14

废话不多说,直接上干货

 

1、Hibernate的优/缺点

  Hibernate
优点

(1)不需要编写的SQL语句(不需要编辑JDBC),只需要操作相应的对象就可以了,就可以能够存储、更新、删除、加载对象,可以提高生产效率

(2)使用Hibernate,移植性好(只要使用Hibernate标准开发,更换数据库时,只需要配置相应的配置文件就可以了,不需要做其它任务的操作)

                   (3)Hibernate实现了透明持久化。当保存一个对象时,这个对象不需要继承Hibernate中的任何类、实现任何接口,

只是个纯粹的单纯对象—称为POJO对象(最纯粹的对象—这个对象没有继承第三方框架的任何类和实现它的任何接口)

(4)Hibernate是一个没有侵入性的框架,没有侵入性的框架我们一般称为轻量级框架

(5)Hibernate代码测试方便

(6)有更好的二级缓存机制,可以使用第三方缓存

缺点

(1)使用数据库特性的语句,将很难调优

(2)对大批量数据更新存在问题

(3)系统中存在大量的攻击查询功能

(4)学习门槛不低,要精通门槛更高。

 2、MyBatis的优/缺点

  MyBatis
优点

1、入门简单,即学即用

2、基于sQL语句编程,相当灵活,不会对应用程序或者数据库的现有设计造成任何影响SQL写在XML里,解除 sql与程序代码的耦合,便于统一管理;提供 XML标签,支持编写动态SQL语句,并可重用。

3、与JDBC相比,减少了50%以上的代码量,消除了JDBC大量冗余的代码,不需要手动开关连接;

4、很好的与各种数据库兼容(因为MyBatis 使用JDBC来连接数据库,所以只要JDBC支持的数据库MyBatis都支持)。

5、能够与Spring很好的集成;

6、提供映射标签,支持对象与数据库的ORM字段关系映射;提供对象关系映射标签,支持对象关系组件维护。



缺点

1、SQL语句的编写工作量较大,尤其当字段多、关联表多时,对开发人员编写SQL语句的功底有一定要求。

 2、SQL语句依赖于数据库,导致数据库移植性差,不能随意更换数据库。

3、二级缓存机制不佳。

 

3、Hibernate与MyBatis对比

  MyBatis Hibernate
量级: 轻量级,上手简单,插件多 重量级,功能齐全,精通较难(ps:此处指的重量级是相对于MyBatis来说的,Hibernate在框架中是属于轻量级的)
SQL自由度: SQL自由度高。提供更灵活的SQL编写方式 SQL自由度低,仅对基本的SQL语法有较好支持。不过Hibernate也支持自己手动写SQL。
开发效率: 低。需要维护SQL。 高。DAO层开发更简单,支持JPA。
数据库无关性: 差。所有SQL都是依赖数据库书写的,需要针对特定数据库维护SQL. 好。高度解耦,封装了JDBC的实现,只需在配置中指定数据库。
缓存: 自身的缓存机制较差。 自身的缓存机制较好,可避免脏读。
映射: POJo与SQL的映射,将SQL所需的参数、返回的结果字段映射到指定PoJo,半ORM,实际是sQL mapping POJO与数据库表的映射,自动生成和执行SQL,完全的ORM
性能: 性能稍高 用封装方法性能会降低一点( SQL生成、全字段查询),用封装方法性能会降低一点( SQL生成、全字段查询),
适用场景: 擅长复杂的查询,适用于分析型系统。计算机集群需要跨数据库事务时,Mybatis更灵活。 面向对象的思维方式更有利于业务系统建模分析,适合单数据库,数据量小,无多表关联,数据库结构不稳定的项目。