17 回答

TA貢獻1876條經(jīng)驗 獲得超7個贊
hibernate
適合于都是單表的增刪改差,開發(fā)效率很高,可是一旦業(yè)務(wù)擴展或者當初db
設(shè)計不好,需要連表查詢(因為hibernate的思想是對表的類化,但實際生活中要做到完全的類化在一個項目剛開始的時候是不容易做到的)不同的結(jié)果再加上刪選匹配的話效率就會下降(除非你寫sql,但是這樣一來還不如一開始用mybatis),尤其再遇到大數(shù)據(jù)量,效率成倍數(shù)下降。
不超過100個用戶?,這里的數(shù)量級不是按單表算的,單表如果超過一定數(shù)據(jù)量也不是簡單選用hibernate
或mybatis
能解決的,只能說如果用mybatis
的話比較好改而已。就我經(jīng)驗,如果涉及大量連表查詢且業(yè)務(wù)復(fù)雜的時候(通常項目到最后都是如此)最好用mybatis
,簡單的還是hibernate
快一些(開發(fā)效率
)

TA貢獻1825條經(jīng)驗 獲得超4個贊

TA貢獻1797條經(jīng)驗 獲得超6個贊
下面的回答說的都挺好的,一是MyBatis學(xué)起來簡單,二是靈活,直接寫SQL易于掌控,至于性能都不是什么重點,開發(fā)效率、可維護性什么的比性能要重要的多。

TA貢獻1886條經(jīng)驗 獲得超2個贊

TA貢獻2016條經(jīng)驗 獲得超9個贊
hibernate、mybatis都只是對JDBC的封裝,程序性能好不好,主要還是看SQL寫得夠不夠優(yōu)秀,DB設(shè)計是不是合理,當然hibernate不少SQL是用程序方式實現(xiàn)的,如果兩個框架都很精通,使用起來性能上差別應(yīng)該不大,那么問題來了,hibernate封裝程度過高,想精通其實是挺困難的,mybatis則只是jdbc的簡單封裝,學(xué)習(xí)成本較低,而且hibernate很多場景下將sql封裝起來了,如果不是特別精通的話,有些時候?qū)懗鰜淼某绦驎霈F(xiàn)預(yù)料不到的情況,mybatis則因為較簡單,也沒做太多的事,所以程序運行結(jié)果通常比較容易預(yù)料到可能出現(xiàn)的問題。
兩個框架其實設(shè)計都很優(yōu)秀,個人使用習(xí)慣反而更重要,習(xí)慣于mybatis的人,一般很難會再切換到hibernate的,反之如果真正精通hibernate的人,應(yīng)該也不會刻意去使用mybatis(個人愚見)。

TA貢獻1780條經(jīng)驗 獲得超4個贊
實際工作中都使用Mybatis基本上并不是基于性能或者可用性上的考量,而是基于個人習(xí)慣。
像我們這些老程序員,寫SQL習(xí)慣了,不寫就難受。相比之下過于自動化的hibernate會讓我們感到恐慌。
僅此而已。

TA貢獻1797條經(jīng)驗 獲得超4個贊

TA貢獻1795條經(jīng)驗 獲得超7個贊

TA貢獻1875條經(jīng)驗 獲得超5個贊
對比這兩個之間的關(guān)系,從開發(fā)效率、可維護性、性能三個方面給出考慮。而就其重要性而言,在項目工程開發(fā)過程中,開發(fā)效率>可維護性>性能??赡軐τ谀承I(yè)務(wù)來說,性能更關(guān)鍵,但放眼全局,個人覺得開發(fā)效率>可維護性>性能。
首先來說,開發(fā)效率。個人感覺如果你是做一些簡單的CMS類似的只有簡單的增刪改查的項目,那么使用Hibernate更有優(yōu)勢,不需要掌握太多的Hibernate知識,只需要會一些基本的查詢和一些配置(Hibernate真正要學(xué)會,個人感覺知識量比mybatis大很多)。hiberbate是用java對象拼sql,mybatis是直接寫原生sql。hibernate提供了很好的映射機制,mybatis還需要自己寫resultmap paramMap這些東西。Hibernate和MyBatis都有相應(yīng)的代碼生成工具??梢陨珊唵位镜腄AO層方法。針對高級查詢,Mybatis需要手動編寫SQL語句,以及ResultMap。而Hibernate有良好的映射機制,開發(fā)者無需關(guān)心SQL的生成與結(jié)果映射,可以更專注于業(yè)務(wù)流程。綜上所述,那么從開發(fā)效率上來講,Hibernate> mybatis。
可維護性:hiberbate是用java對象拼sql,mybatis是直接寫原生sql。直接寫SQL更容易維護,而前者需要通過java對象來看SQL,你得把sql,用System.out.println(sql);把SQL打印出來,才可以看到。Hibernate的查詢會將表中的所有字段查詢出來,這一點會有性能消耗。Hibernate也可以自己寫SQL來指定需要查詢的字段,但這樣就破壞了Hibernate開發(fā)的簡潔性。而Mybatis的SQL是手動編寫的,所以可以按需求指定查詢的字段。Hibernate HQL語句的調(diào)優(yōu)需要將SQL打印出來,而Hibernate的SQL被很多人嫌棄因為太丑了。MyBatis的SQL是自己手動寫的所以調(diào)整方便。但Hibernate具有自己的日志統(tǒng)計。Mybatis本身不帶日志統(tǒng)計,使用Log4j進行日志記錄。
性能:兩者都提供了緩存,session機制。小項目兩者差不多吧.大型項目mybatis>hibernate。

TA貢獻1789條經(jīng)驗 獲得超10個贊
看大家討論感覺mybaits更好一樣,但當初一直以為hibernate更適合大型開發(fā)就直接走hibernate了。那時項目比較急,用得像mybatis一樣,后來玩久了,發(fā)現(xiàn)很多有趣的東西,hibernate提供的經(jīng)驗簡化了不少工作量和兼容性,但這些絕對需要有經(jīng)驗后才明白,加上后來有用上了hibernate search,全文檢索,也就沒法換了,反正寫原生sql也可以hql也可以,xml配置工具也有,輔助注解也靈活,甚至還能產(chǎn)生原生sql不一樣的one2many,many2many數(shù)據(jù)結(jié)構(gòu),總之就是太全面的一個大家伙了,還沒遇到后悔的時候,就繼續(xù)學(xué)吧。一般是用hibernate tools自動創(chuàng)建所有表的Java和xml的mapping做一般查刪改,然后復(fù)制Java代碼改名,用注解手工建關(guān)聯(lián),刪除不需要的字段。

TA貢獻1900條經(jīng)驗 獲得超5個贊

TA貢獻1936條經(jīng)驗 獲得超7個贊
添加回答
舉報