为了账号安全,请及时绑定邮箱和手机立即绑定

关于mybatis和hibernate的困惑

关于mybatis和hibernate的困惑

宝慕林4294392 2019-03-13 14:15:40
由于java视频里以前好多都是SSH。但是在实际工作中没见过用hibernate的,基本都用mybatis。我有一些疑问:hibernate碰到什么样的业务会变成致命的弱点,都说hibernate效率低,能否举个例子(例如同一个查询用mybatis查询耗时1秒,用hibernate查询耗时10秒)可能是有部分人遇到了hibernate的瓶颈,但是这部分人的业务量我觉得,不是大部分使用hibernate的人都能遇到的。一般的小项目,不超过100个用户,这样的项目综合考虑的话更适合用mybatis还是hibernate?主要从开发效率上来说的话。为什么?谢谢
查看完整描述

17 回答

?
幕布斯6054654

TA贡献1876条经验 获得超7个赞

hibernate适合于都是单表的增删改差,开发效率很高,可是一旦业务扩展或者当初db设计不好,需要连表查询(因为hibernate的思想是对表的类化,但实际生活中要做到完全的类化在一个项目刚开始的时候是不容易做到的)不同的结果再加上删选匹配的话效率就会下降(除非你写sql,但是这样一来还不如一开始用mybatis),尤其再遇到大数据量,效率成倍数下降。
不超过100个用户?,这里的数量级不是按单表算的,单表如果超过一定数据量也不是简单选用hibernatemybatis能解决的,只能说如果用mybatis的话比较好改而已。就我经验,如果涉及大量连表查询且业务复杂的时候(通常项目到最后都是如此)最好用mybatis,简单的还是hibernate快一些(开发效率

查看完整回答
反对 回复 2019-04-22
?
凤凰求蛊

TA贡献1825条经验 获得超4个赞

hibernate学习成本比较高,但是j2ee里头有JPA规范,学习规范也还可以。mybatis就相对来说简单,容易上手,可控。hibernate学习成本高,过度面向对象,难以调优。至于使用的话,看个人了,对于toB或者toC的应用比较偏向mybatis,但是对于做管理后台这种,hibernate就可以


查看完整回答
反对 回复 2019-04-22
?
互换的青春

TA贡献1797条经验 获得超6个赞

下面的回答说的都挺好的,一是MyBatis学起来简单,二是灵活,直接写SQL易于掌控,至于性能都不是什么重点,开发效率、可维护性什么的比性能要重要的多。

查看完整回答
反对 回复 2019-04-22
?
MM们

TA贡献1886条经验 获得超2个赞

hiberbate是用java对象拼sql,mybatis是直接写原生sql。前者开发一时爽,(修改)维护火葬场;后者需要对sql知识有一定了解(相比前者),如果公司有DBA的话,他看原生sql比看java代码要直观得多。至于性能什么的大部分情况下都不用考虑(真要考虑的话可以去搜一下近年来有些人讨论过的“去ORM”),最重要的是可维护性可维护性可维护性。


查看完整回答
反对 回复 2019-04-22
?
慕沐林林

TA贡献2016条经验 获得超9个赞

hibernate、mybatis都只是对JDBC的封装,程序性能好不好,主要还是看SQL写得够不够优秀,DB设计是不是合理,当然hibernate不少SQL是用程序方式实现的,如果两个框架都很精通,使用起来性能上差别应该不大,那么问题来了,hibernate封装程度过高,想精通其实是挺困难的,mybatis则只是jdbc的简单封装,学习成本较低,而且hibernate很多场景下将sql封装起来了,如果不是特别精通的话,有些时候写出来的程序会出现预料不到的情况,mybatis则因为较简单,也没做太多的事,所以程序运行结果通常比较容易预料到可能出现的问题。
两个框架其实设计都很优秀,个人使用习惯反而更重要,习惯于mybatis的人,一般很难会再切换到hibernate的,反之如果真正精通hibernate的人,应该也不会刻意去使用mybatis(个人愚见)。

查看完整回答
反对 回复 2019-04-22
?
Helenr

TA贡献1780条经验 获得超4个赞

实际工作中都使用Mybatis基本上并不是基于性能或者可用性上的考量,而是基于个人习惯。
像我们这些老程序员,写SQL习惯了,不写就难受。相比之下过于自动化的hibernate会让我们感到恐慌。
仅此而已。

查看完整回答
反对 回复 2019-04-22
?
繁星coding

TA贡献1797条经验 获得超4个赞

学习阶段使用过,hibernate 个人的感受是封装的太死了。很多时候感觉带来的不是方便,而是我要为了“配合”这个框架做一些看起来不必要的操作。


查看完整回答
反对 回复 2019-04-22
?
一只萌萌小番薯

TA贡献1795条经验 获得超7个赞

业务量比较小的话,就看你个人哪个比较熟练了。都可以。没必要为这个纠结。mybatis的灵活性要高些,给开发人员更多自己实现的空间。hibernate的关联应该是稍慢一点的原因。


查看完整回答
反对 回复 2019-04-22
?
弑天下

TA贡献1818条经验 获得超8个赞

知乎上也有类似的问题
看到高票的回答大致就是说,hibernatemybatis掌握难度要高一些,对sql的控制弱一些。

查看完整回答
反对 回复 2019-04-22
?
拉丁的传说

TA贡献1789条经验 获得超8个赞

mb sql写到xml里面不也需要解析么,效率也高不到哪里去吧


查看完整回答
反对 回复 2019-04-22
?
慕田峪4524236

TA贡献1875条经验 获得超5个赞

对比这两个之间的关系,从开发效率、可维护性、性能三个方面给出考虑。而就其重要性而言,在项目工程开发过程中,开发效率>可维护性>性能。可能对于某些业务来说,性能更关键,但放眼全局,个人觉得开发效率>可维护性>性能。

首先来说,开发效率。个人感觉如果你是做一些简单的CMS类似的只有简单的增删改查的项目,那么使用Hibernate更有优势,不需要掌握太多的Hibernate知识,只需要会一些基本的查询和一些配置(Hibernate真正要学会,个人感觉知识量比mybatis大很多)。hiberbate是用java对象拼sql,mybatis是直接写原生sql。hibernate提供了很好的映射机制,mybatis还需要自己写resultmap paramMap这些东西。Hibernate和MyBatis都有相应的代码生成工具。可以生成简单基本的DAO层方法。针对高级查询,Mybatis需要手动编写SQL语句,以及ResultMap。而Hibernate有良好的映射机制,开发者无需关心SQL的生成与结果映射,可以更专注于业务流程。综上所述,那么从开发效率上来讲,Hibernate> mybatis。

可维护性:hiberbate是用java对象拼sql,mybatis是直接写原生sql。直接写SQL更容易维护,而前者需要通过java对象来看SQL,你得把sql,用System.out.println(sql);把SQL打印出来,才可以看到。Hibernate的查询会将表中的所有字段查询出来,这一点会有性能消耗。Hibernate也可以自己写SQL来指定需要查询的字段,但这样就破坏了Hibernate开发的简洁性。而Mybatis的SQL是手动编写的,所以可以按需求指定查询的字段。Hibernate HQL语句的调优需要将SQL打印出来,而Hibernate的SQL被很多人嫌弃因为太丑了。MyBatis的SQL是自己手动写的所以调整方便。但Hibernate具有自己的日志统计。Mybatis本身不带日志统计,使用Log4j进行日志记录。

性能:两者都提供了缓存,session机制。小项目两者差不多吧.大型项目mybatis>hibernate。


查看完整回答
反对 回复 2019-04-22
?
至尊宝的传说

TA贡献1789条经验 获得超10个赞

看大家讨论感觉mybaits更好一样,但当初一直以为hibernate更适合大型开发就直接走hibernate了。那时项目比较急,用得像mybatis一样,后来玩久了,发现很多有趣的东西,hibernate提供的经验简化了不少工作量和兼容性,但这些绝对需要有经验后才明白,加上后来有用上了hibernate search,全文检索,也就没法换了,反正写原生sql也可以hql也可以,xml配置工具也有,辅助注解也灵活,甚至还能产生原生sql不一样的one2many,many2many数据结构,总之就是太全面的一个大家伙了,还没遇到后悔的时候,就继续学吧。一般是用hibernate tools自动创建所有表的Java和xml的mapping做一般查删改,然后复制Java代码改名,用注解手工建关联,删除不需要的字段。

查看完整回答
反对 回复 2019-04-22
?
梵蒂冈之花

TA贡献1900条经验 获得超5个赞

简单来说,Hibernate 是面向对象的,MyBatis 是面向 SQL 的。选哪个得看你的人员配置对哪个熟悉,业务会不会有很多复杂查询,对性能要求高不高。另外,很多时候都是对 Hibernate 不熟悉,所以会觉得 Hibernate 做不了这个事情,或者做起来很复杂。Hibernate 表示这锅我不背。。。


查看完整回答
反对 回复 2019-04-22
?
心有法竹

TA贡献1866条经验 获得超5个赞

个人还觉得hibernate 好用呢,自动建表,性能问题是关联查询。


查看完整回答
反对 回复 2019-04-22
?
LEATH

TA贡献1936条经验 获得超6个赞

技术没有好坏,只有适不适合,在特定的情况下解决特定的问题。不同的人用hibernate,会产生不同的结果,如果你精通hibernate,性能一样不是问题。看到楼上说了那么多二者的比较,其实真的没有什么意义。


查看完整回答
反对 回复 2019-04-22
  • 17 回答
  • 0 关注
  • 651 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号