由于java视频里以前好多都是SSH。但是在实际工作中没见过用hibernate的,基本都用mybatis。
我有一些疑问:
hibernate碰到什么样的业务会变成致命的弱点,都说hibernate效率低,能否举个例子(例如同一个查询用mybatis查询耗时1秒,用hibernate查询耗时10秒)
可能是有部分人遇到了hibernate的瓶颈,但是这部分人的业务量我觉得,不是大部分使用hibernate的人都能遇到的。一般的小项目,不超过100个用户,这样的项目综合考虑的话更适合用mybatis还是hibernate?主要从开发效率上来说的话。为什么?
可以嘗試下:http://www.oschina.net/p/monalisa-core 配合Eclipse的插件使用更方便:
支援自動產生DTO
SQL查詢不需要像Mybatis那樣要寫DTO,然後再配置一堆的字段mapping了, 插件全部幫你自動搞定.
參考文章: 如何根據動態SQL程式碼自動生成DTO
多行字串語法
在Java程式碼裡面書寫多行字串變得非常輕鬆。
DataTable操作
DataTable可以像用SQL來查詢資料庫表一些方便的進行欄位選擇,過濾,聚合,分組,JOIN等
hibernate
适合于都是单表的增删改差,开发效率很高,可是一旦业务扩展或者当初db
设计不好,需要连表查询(因为hibernate的思想是对表的类化,但实际生活中要做到完全的类化在一个项目刚开始的时候是不容易做到的)不同的结果再加上删选匹配的话效率就会下降(除非你写sql,但是这样一来还不如一开始用mybatis),尤其再遇到大数据量,效率成倍数下降。不超过100个用户?,这里的数量级不是按单表算的,单表如果超过一定数据量也不是简单选用
hibernate
或mybatis
能解决的,只能说如果用mybatis
的话比较好改而已。就我经验,如果涉及大量连表查询且业务复杂的时候(通常项目到最后都是如此)最好用mybatis
,简单的还是hibernate
快一些(开发效率
)hibernate學習成本比較高,但j2ee裡頭有JPA規範,學習規範也還可以。 mybatis就相對來說簡單,容易上手,可控。 hibernate學習成本高,過度面向對象,難以調校。至於使用的話,看個人了,對於toB或toC的應用比較偏向mybatis,但是對於做管理後台這種,hibernate就可以
謝邀!以下的回答說的都挺好的,一是MyBatis學起來簡單,二是靈活,直接寫SQL易於掌控,至於性能都不是什麼重點,開發效率、可維護性什麼的比性能要重要的多。
hiberbate是用java物件拼sql,mybatis是直接寫原生sql。前者開發一時爽,(修改)維護火葬場;後者需要對sql知識有一定了解(相比前者),如果公司有DBA的話,他看原生sql比看java程式碼要直觀得多。至於性能什麼的大部分情況下都不用考慮(真要考慮的話可以去搜一下近年來有些人討論過的“去ORM”),最重要的是可維護性可維護性可維護性。
hibernate、mybatis都只是對JDBC的封裝,程式效能好不好,主要還是看SQL寫得夠不夠優秀,DB設計是不是合理,當然hibernate不少SQL是用程式方式實現的,如果兩個框架都很精通,使用起來性能上差別應該不大,那麼問題來了,hibernate封裝程度過高,想精通其實是挺困難的,mybatis則只是jdbc的簡單封裝,學習成本較低,而且hibernate很多場景下將sql封裝起來了,如果不是特別精通的話,有些時候寫出來的程式會出現預料不到的情況,mybatis則因為較簡單,也沒做太多的事,所以程式運行結果通常比較容易預料到可能出現的問題。
兩個框架其實設計都很優秀,個人使用習慣反而更重要,習慣於mybatis的人,一般很難會再切換到hibernate的,反之如果真正精通hibernate的人,應該也不會刻意去使用mybatis(個人愚見)。
實際工作中都使用Mybatis基本上不是基於效能或可用性上的考量,而是基於個人習慣。
像我們這些老程式設計師,寫SQL習慣了,不寫就難受。相較之下過於自動化的hibernate會讓我們感到恐慌。
僅此而已。
學習階段使用過,hibernate 個人的感受是封裝的太死了。很多時候感覺帶來的不是方便,而是我要為了「配合」這個框架做一些看起來不必要的操作。
業務量比較小的話,就看你個人哪個比較熟練了。都可以。沒必要為這個糾結。 mybatis的彈性要高些,給開發人員更多自己實現的空間。 hibernate的關聯應該是稍慢一點的原因。