Hibernate和MyBatis的区别
废话不多说,直接上干货
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更灵活。 | 面向对象的思维方式更有利于业务系统建模分析,适合单数据库,数据量小,无多表关联,数据库结构不稳定的项目。 |