17 回答

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

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

TA贡献1797条经验 获得超6个赞
下面的回答说的都挺好的,一是MyBatis学起来简单,二是灵活,直接写SQL易于掌控,至于性能都不是什么重点,开发效率、可维护性什么的比性能要重要的多。

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

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

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

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

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

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。

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

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

TA贡献1936条经验 获得超6个赞
添加回答
举报