搜尋
首頁Javajava教程mybatis和hibernate的差別

mybatis和hibernate的差別

Jun 05, 2019 pm 02:28 PM
hibernatemybatis

在java開發中我們用的兩種兩種主流框架組合為SSM,Spring,SpringMVC,MyBatis和SSH,Struts2,Spring,Hibernate.今天我們先來看看兩種資料庫框架之間到底有什麼區別。

mybatis和hibernate的差別

第一個方面:開發速度的比較

就開發速度而言,Hibernate的真正掌握要比Mybatis來得難些。 Mybatis框架相對簡單很容易上手,但也相對簡陋些。個人覺得要用好Mybatis還是先理解好Hibernate。 (推薦學習:Java影片教學

比起兩者的開發速度,不僅要考慮到兩者的特性及效能,還要根據專案需求去考慮究竟哪一個比較適合專案開發,例如:一個專案中用到的複雜查詢基本上沒有,就是簡單的增刪改查,這樣選擇hibernate效率就很快了,因為基本的sql語句已經被封裝好了,根本不需要你去寫sql語句,這就節省了大量的時間,但是對於一個大型項目,複雜語句較多,這樣再去選擇hibernate就不是一個太好的選擇,選擇mybatis就會加快許多,而且語句的管理也比較方便。

第二面向:發展工作量的比較

Hibernate和MyBatis都有對應的程式碼產生工具。可以產生簡單基本的DAO層方法。針對進階查詢,Mybatis需要手動編寫SQL語句,以及ResultMap。而Hibernate有良好的映射機制,開發者不需要關心SQL的生成與結果映射,可以更專注於業務流程。

第三方面:sql最佳化方面

Hibernate的查詢會將表中的所有欄位查詢出來,這一點會有效能消耗。 Hibernate也可以自己寫SQL來指定需要查詢的字段,但這樣就破壞了Hibernate開發的簡潔性。而Mybatis的SQL是手動寫的,所以可以依需求指定查詢的欄位。

Hibernate HQL語句的調優需要將SQL印出來,而Hibernate的SQL被很多人嫌棄因為太醜了。 MyBatis的SQL是自己手動寫的所以調整方便。但Hibernate具有自己的日誌統計。 Mybatis本身不帶日誌統計,使用Log4j進行日誌記錄。

第四個面向:物件管理的比較

Hibernate 是完整的物件/關聯映射解決方案,它提供了物件狀態管理(state management)的功能,使開發者不再需要理會底層資料庫系統的細節。也就是說,相對於常見的 JDBC/SQL 持久層方案中需要管理 SQL 語句,Hibernate採用了更自然的物件導向的視角來持久化 Java 應用中的資料。

換句話說,使用 Hibernate 的開發者應該總是專注於物件的狀態(state),不必考慮 SQL 語句的執行。這部分細節已經由 Hibernate 掌管妥當,只有開發者在進行系統效能調優的時候才需要了解。而MyBatis在這塊沒有文件說明,使用者需要對物件自己進行詳細的管理。

第五方面:快取機制

Hibernate快取

Hibernate一級快取是Session緩存,利用好一級快取就需要對Session的生命週期進行管理好。建議在一個Action操作中使用一個Session。一級快取需要對Session進行嚴格管理。

Hibernate二級快取是SessionFactory級的快取。 SessionFactory的快取分為內建快取和外部快取。內建快取中存放的是SessionFactory物件的一些集合屬性包含的資料(映射元素據及預定SQL語句等),對於應用程式來說,它是唯讀的。外置快取中存放的是資料庫資料的副本,其作用和一級快取類似.二級快取除了以記憶體作為儲存媒體外,還可以選用硬碟等外部儲存裝置。二級緩存稱為進程級快取或SessionFactory級緩存,它可以被所有session共享,它的生命週期伴隨著SessionFactory的生命週期存在和消亡。

MyBatis快取

MyBatis 包含一個非常強大的查詢快取功能,它可以非常方便地配置和自訂。 MyBatis 3 中的快取實現的許多改進都已經實現了,使得它更加強大且易於配置。

預設是沒有開啟快取的,除了局部的 session 快取,可以增強變現而且處理循環 依賴也是必須的。要開啟二級快取,你需要在你的 SQL 映射檔中加入一行: 

字面上就是這樣。這個簡單語句的效果如下:

映射語句檔案中的所有 select 語句將會被快取。

映射語句檔案中的所有 insert,update 和 delete 語句會刷新快取。

快取會使用 Least Recently Used(LRU,最近最少使用的)演算法來收回。

根據時間表(例如 no Flush Interval,沒有刷新間隔), 快取不會以任何時間順序 來刷新。

快取會儲存清單集合或物件(無論查詢方法傳回什麼)的 1024 個參考。

快取會被視為是read/write(可讀/可寫)的快取,意味著物件檢索不是共享的,而且可以安全地被呼叫者修改,而不干擾其他呼叫者或執行緒所做的潛在修改。

所有的這些屬性都可以透過快取元素的屬性來修改。

例如:

這個更高級的設定創建了一個FIFO 快取,並每隔60 秒刷新,存數結果物件或列表的512 個引用,而且返回的物件被認為是唯讀的,因此在不同線程中的呼叫者之間修改它們會導致衝突。可用的收回策略有, 預設的是 LRU:

LRU – 最近最少使用的:移除最長時間不被使用的物件。

FIFO – 先進先出:按物件進入快取的順序來移除它們。

SOFT – 軟參考:移除基於垃圾回收器狀態和軟參考規則的物件。

WEAK – 弱引用:更積極移除基於垃圾收集器狀態和弱引用規則的物件。

flushInterval(刷新間隔)可以被設定為任意的正整數,而且它們代表一個合理的毫秒 形式的時間段。預設情況是不設定,也就是沒有刷新間隔,快取僅僅調用語句時刷新。

size(引用數目)可以被設定為任意正整數,要記住你快取的物件數目和你運行環境的 可用記憶體資源數目。預設值是1024。

readOnly(唯讀)屬性可以被設定為 true 或 false。只讀的快取會給所有呼叫者傳回緩 存物件的相同實例。因此這些物件不能被修改。這提供了很重要的效能優勢。可讀寫的快取 會傳回快取物件的拷貝(透過序列化) 。這會慢一些,但是安全,因此預設是 false。

相同點:Hibernate和Mybatis的二級快取除了採用系統預設的快取機制外,都可以透過實作你自己的快取或為其他第三方快取方案,建立適配器來完全覆寫快取行為。

不同點:Hibernate的二級快取配置在SessionFactory產生的設定檔中進行詳細配置,然後再在特定的表-物件映射中配置是那種快取。

MyBatis的二級快取配置都是在每個特定的表-物件映射中進行詳細配置,這樣針對不同的表可以自訂不同的快取機制。並且Mybatis可以在命名空間中共享相同的快取配置和實例,透過Cache-ref來實現。

兩者比較:因為Hibernate對查詢物件有著良好的管理機制,使用者無需關心SQL。所以使用二級快取時如果出現髒數據,系統會報出錯誤並提示。

而MyBatis在這一方面,使用二級快取時需要特別小心。如果無法完全確定資料更新操作的波及範圍,避免Cache的盲目使用。否則,髒數據的出現會為系統的正常運作帶來很大的隱患。

更多Java相關技術文章,請造訪Java開發教學欄位進行學習!

以上是mybatis和hibernate的差別的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
JVM性能與其他語言JVM性能與其他語言May 14, 2025 am 12:16 AM

JVM'SperformanceIsCompetitiveWithOtherRuntimes,operingabalanceOfspeed,安全性和生產性。 1)JVMUSESJITCOMPILATIONFORDYNAMICOPTIMIZAIZATIONS.2)c提供NativePernativePerformanceButlanceButlactsjvm'ssafetyFeatures.3)

Java平台獨立性:使用示例Java平台獨立性:使用示例May 14, 2025 am 12:14 AM

JavaachievesPlatFormIndependencEthroughTheJavavIrtualMachine(JVM),允許CodeTorunonAnyPlatFormWithAjvm.1)codeisscompiledIntobytecode,notmachine-specificodificcode.2)bytecodeisisteredbytheybytheybytheybythejvm,enablingcross-platerssectectectectectross-eenablingcrossectectectectectection.2)

JVM架構:深入研究Java虛擬機JVM架構:深入研究Java虛擬機May 14, 2025 am 12:12 AM

TheJVMisanabstractcomputingmachinecrucialforrunningJavaprogramsduetoitsplatform-independentarchitecture.Itincludes:1)ClassLoaderforloadingclasses,2)RuntimeDataAreafordatastorage,3)ExecutionEnginewithInterpreter,JITCompiler,andGarbageCollectorforbytec

JVM:JVM與操作系統有關嗎?JVM:JVM與操作系統有關嗎?May 14, 2025 am 12:11 AM

JVMhasacloserelationshipwiththeOSasittranslatesJavabytecodeintomachine-specificinstructions,managesmemory,andhandlesgarbagecollection.ThisrelationshipallowsJavatorunonvariousOSenvironments,butitalsopresentschallengeslikedifferentJVMbehaviorsandOS-spe

Java:寫一次,在任何地方跑步(WORA) - 深入了解平台獨立性Java:寫一次,在任何地方跑步(WORA) - 深入了解平台獨立性May 14, 2025 am 12:05 AM

Java實現“一次編寫,到處運行”通過編譯成字節碼並在Java虛擬機(JVM)上運行。 1)編寫Java代碼並編譯成字節碼。 2)字節碼在任何安裝了JVM的平台上運行。 3)使用Java原生接口(JNI)處理平台特定功能。儘管存在挑戰,如JVM一致性和平台特定庫的使用,但WORA大大提高了開發效率和部署靈活性。

Java平台獨立性:與不同的操作系統的兼容性Java平台獨立性:與不同的操作系統的兼容性May 13, 2025 am 12:11 AM

JavaachievesPlatFormIndependencethroughTheJavavIrtualMachine(JVM),允許Codetorunondifferentoperatingsystemsswithoutmodification.thejvmcompilesjavacodeintoplatform-interploplatform-interpectentbybyteentbytybyteentbybytecode,whatittheninternterninterpretsandectectececutesoneonthepecificos,atrafficteyos,Afferctinginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginginging

什麼功能使Java仍然強大什麼功能使Java仍然強大May 13, 2025 am 12:05 AM

JavaispoperfulduetoitsplatFormitiondence,對象與偏見,RichstandardLibrary,PerformanceCapabilities和StrongsecurityFeatures.1)Platform-dimplighandependectionceallowsenceallowsenceallowsenceallowsencationSapplicationStornanyDevicesupportingJava.2)

頂級Java功能:開發人員的綜合指南頂級Java功能:開發人員的綜合指南May 13, 2025 am 12:04 AM

Java的頂級功能包括:1)面向對象編程,支持多態性,提升代碼的靈活性和可維護性;2)異常處理機制,通過try-catch-finally塊提高代碼的魯棒性;3)垃圾回收,簡化內存管理;4)泛型,增強類型安全性;5)ambda表達式和函數式編程,使代碼更簡潔和表達性強;6)豐富的標準庫,提供優化過的數據結構和算法。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具