Hibernate和Mybatis比较

原创 2018年04月16日 17:20:26

经常有人拿这两者进行比较,朋友间也会问道你们公司用哪个呀?如何、怎样、.........。大家也一定看到不少写这两者区别、比较的文章吧,今天天健通泰科技技术小编就自己多年的技术经验做了如下总结,文章主要分析一下Hibernate和Mybatis。


Hibernate和Mybatis认识

Hibernate算是从上学时期就开始接触了,那时候还是用SSH框架,觉得hibernate这玩意儿老牛逼了, 它把数据库中的表转换成java类,通过xml文件来实现类和表之间的映射。

Mybatis 接触的比较晚,之前只是知道但没实际结合项目应用,直到17年才真正应用到Mybatis。

从Hibernate切换到Mybatis的感受

用Hibernate时,虽然它也支持原生sql,但把sql写在java代码中好不好呢?

切换到Mybatis 咦!也挺好嘛,入门还算简单;sql统一在xml中,业务逻辑什么的sql可以自由发挥了,算是很灵活了。

Hibernate 简介

Hibernate对数据库结构提供了较为完整的封装,Hibernate的O/R Mapping实现了POJO 和数据库表之间的映射,以及SQL 的自动生成和执行。程序员往往只需定义好了POJO 到数据库表的映射关系,即可通过Hibernate 提供的方法完成持久层操作。程序员甚至不需要对SQL 的熟练掌握, Hibernate/OJB 会根据制定的存储逻辑,自动生成对应的SQL 并调用JDBC 接口加以执行。

MyBatis简介

iBATIS 的着力点,则在于POJO 与SQL之间的映射关系。然后通过映射配置文件,将SQL所需的参数,以及返回的结果字段映射到指定POJO。 相对Hibernate“O/R”而言,iBATIS是一种“Sql Mapping”的ORM实现。

开发速度

Hibernate的真正掌握要比Mybatis来得难些。Mybatis框架相对简单容易上手。个人觉得要用好Mybatis还是首先要先理解好Hibernate。

开发工作量

Hibernate和MyBatis都有代码生成工具。可以生成简单基本的DAO层方法。

针对高级查询,Mybatis需要手动编写SQL语句,以及ResultMap。而Hibernate有良好的映射机制,开发者无需关心SQL的生成与结果映射,可以更专注于业务流程。

Hibernate的调优方案

1. 制定合理的缓存策略;

2. 尽量使用延迟加载特性;

3. 采用合理的Session管理机制;

4. 使用批量抓取,设定合理的批处理参数(batch_size);

5. 进行合理的O/R映射设计

Mybatis调优方案

MyBatis在Session方面和Hibernate的Session生命周期是一致的,同样需要合理的Session管理机制。MyBatis同样具有二级缓存机制。 MyBatis可以进行详细的SQL优化设计。

SQL优化方面

Hibernate的查询会将表中的所有字段查询出来,这一点会有性能消耗。Hibernate也可以自己写SQL来指定需要查询的字段,但这样就破坏了Hibernate开发的简洁性。而Mybatis的SQL是手动编写的,所以可以按需求指定查询的字段。

Hibernate HQL语句的调优需要将SQL打印出来,而Hibernate的SQL被很多人嫌弃因为太丑了。MyBatis的SQL是自己手动写的所以调整方便。但Hibernate具有自己的日志统计。Mybatis本身不带日志统计,使用Log4j进行日志记录。

两者比较

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

而MyBatis在这一方面,使用二级缓存时需要特别小心。如果不能完全确定数据更新操作的波及范围,避免Cache的盲目使用。否则,脏数据的出现会给系统的正常运行带来很大的隐患。

两者相同点

•{cke_protected_1}Hibernate与MyBatis都可以是通过SessionFactoryBuider由XML配置文件生成SessionFactory,然后由SessionFactory 生成Session,最后由Session来开启执行事务和SQL语句。其中SessionFactoryBuider,SessionFactory,Session的生命周期都是差不多的。

•{cke_protected_2}Hibernate和MyBatis都支持JDBC和JTA事务处理。

Mybatis优势

•{cke_protected_3}MyBatis可以进行更为细致的SQL优化,可以减少查询字段。

•{cke_protected_4}MyBatis容易掌握,而Hibernate门槛较高。

Hibernate优势

•{cke_protected_5}Hibernate的DAO层开发比MyBatis简单,Mybatis需要维护SQL和结果映射。

•{cke_protected_6}Hibernate对对象的维护和缓存要比MyBatis好,对增删改查的对象的维护要方便。

•{cke_protected_7}Hibernate数据库移植性很好,MyBatis的数据库移植性不好,不同的数据库需要写不同SQL。

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

总结

•{cke_protected_9}Hibernate功能强大,数据库无关性好,O/R映射能力强,如果你对Hibernate相当精通,而且对Hibernate进行了适当的封装,那么你的项目整个持久层代码会相当简单,需要写的代码很少,开发速度很快,非常爽。

•{cke_protected_10}Hibernate的缺点就是学习门槛不低,要精通门槛更高,而且怎么设计O/R映射,在性能和对象模型之间如何权衡取得平衡,以及怎样用好Hibernate方面需要你的经验和能力都很强才行。

•{cke_protected_11}iBATIS入门简单,即学即用,提供了数据库查询的自动对象绑定功能,而且延续了很好的SQL使用经验,对于没有那么高的对象模型要求的项目来说,相当完美。

•{cke_protected_12}iBATIS的缺点就是框架还是比较简陋,功能尚有缺失,虽然简化了数据绑定代码,但是整个底层数据库查询实际还是要自己写的,工作量也比较大,而且不太容易适应快速数据库修改。

一句话总结

在文章的结尾,小编将Mybatis和Hibernate之间的区别自个用六个词做总结:

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

Hibernate:强大、方便、高效、复杂、间接、全自动化

喜欢我你就关注我,觉得好你就点赞。北京天健通泰科技有限公司,专业提供试验、检验检测业务信息化产品及解决方案,知识信息化总线产品及解决方案。

mybatis与hibernate的对比

本文并非原创,旨在整理汇总,不定期进行增加和修改。相同点:(1)Hibernate与MyBatis都是通过SessionFactoryBuider由XML配置文件生成SessionFactory,由S...
  • w_rcss
  • w_rcss
  • 2017-12-04 13:15:01
  • 11622

【MyBatis】4:MyBatis与Hibernate的对比分析

在MyBatis系列文章的第一篇, 提到了JDBC编程在实际开发中存在的诸多问题,后来介绍了MyBatis之后也没有分析,MyBatis是如何解决JDBC存在的问题的。在这篇博客开头我们先来一起看看,...
  • u010929604
  • u010929604
  • 2016-07-31 16:00:10
  • 1111

JDBC和hibernate,mybatis的比较

mybatis,jdbc,hibernate的比较,优缺点
  • wj903829182
  • wj903829182
  • 2017-05-13 08:54:08
  • 2510

【持久化框架】Mybatis与Hibernate的详细对比

这篇博文我们重点分析一下Mybatis与Hibernate的区别
  • jiuqiyuliang
  • jiuqiyuliang
  • 2015-05-01 14:20:20
  • 80412

Hibernate和Mybatis对比(优缺点)

项目也做过几个, 使用Mybatis就做一个项目, 基本上都是使用Hibernate, 也只是知道几点关于这两个框架的区别, 今天闲着没事干, 从网上找了几篇文章, 做了一个简单的整理。网上关于这两个...
  • dreamsunday
  • dreamsunday
  • 2015-10-31 10:04:22
  • 5634

hibernate与mybatis异同与比较(涵盖网上各个版本,清晰明了)

一、序言        最近一直用mybatis做开发,以前用过hibernate,能感受到一些它们在使用上的区别,不过总想抽出时间来好好比较比较弄弄清楚它们各自的优劣,以便更好进行选择和深入的了解。...
  • chenleixing
  • chenleixing
  • 2015-02-14 18:21:19
  • 16350

持久层框架的比较Hibernate与 MyBatis 胡俊铭

最近网上 看到很多人质疑....现在好多Web项目用了MyBatis,没感觉MyBatis好到哪里了,从开发效率上讲,不管是Hibernate的反向工程,还是自动建表,关联映射都比MyBatis方便得...
  • dongnaosenlu
  • dongnaosenlu
  • 2017-09-11 16:14:42
  • 621

mybatis和hibernate的对比总结

mybatis和hibernate  第一步, 首先让我们对mybatis和hibernate对比了解下          1、 Hibernate :Hibernate 是当前非常流行的ORM框...
  • u011068702
  • u011068702
  • 2015-10-18 23:13:59
  • 1315

总结传统JDBC以及MyBatis和Hibernate的对比

首先,让我们回顾一下。在上一个博客中写道“使用传统的JDBC编程来操作数据”,详见http://blog.csdn.net/zwg_html/article/details/55668894让我们来总...
  • zwg_html
  • zwg_html
  • 2017-02-20 21:17:23
  • 2377
收藏助手
不良信息举报
您举报文章:Hibernate和Mybatis比较
举报原因:
原因补充:

(最多只允许输入30个字)