mybatis和hibernate的差別
在java開發中我們用的兩種兩種主流框架組合為SSM,Spring,SpringMVC,MyBatis和SSH,Struts2,Spring,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中文網其他相關文章!

熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

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

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

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

iBatis與MyBatis:你該選擇哪一個?簡介:隨著Java語言的快速發展,許多持久化框架也應運而生。 iBatis和MyBatis是兩個備受歡迎的持久化框架,它們都提供了一個簡單而高效的資料存取解決方案。本文將介紹iBatis和MyBatis的特點和優勢,並給出一些具體的程式碼範例,幫助你選擇合適的框架。 iBatis簡介:iBatis是一個開源的持久化框架

JPA和MyBatis:功能與效能比較分析引言:在Java開發中,持久化框架扮演著非常重要的角色。常見的持久化框架包括JPA(JavaPersistenceAPI)和MyBatis。本文將對這兩個框架的功能和效能進行比較分析,並提供具體的程式碼範例。一、功能對比:JPA:JPA是JavaEE的一部分,提供了一個物件導向的資料持久化解決方案。它透過註解或X

MyBatis動態SQL標籤解讀:Set標籤用法詳解MyBatis是一個優秀的持久層框架,它提供了豐富的動態SQL標籤,可以靈活地建構資料庫操作語句。其中,Set標籤是用來產生UPDATE語句中SET子句的標籤,在更新作業中非常常用。本文將詳細解讀MyBatis中Set標籤的用法,以及透過具體的程式碼範例來示範其功能。什麼是Set標籤Set標籤用於MyBati

MyBatis中實現批量刪除語句的幾種方式,需要具體程式碼範例近年來,由於資料量的不斷增加,批量操作成為了資料庫操作的一個重要環節之一。在實際開發中,我們經常需要批量刪除資料庫中的記錄。本文將重點介紹在MyBatis中實作批量刪除語句的幾種方式,並提供相應的程式碼範例。使用foreach標籤實作批量刪除MyBatis提供了foreach標籤,可以方便地遍歷一個集

MyBatis批量刪除語句的使用方法詳解,需要具體程式碼範例引言:MyBatis是一款優秀的持久層框架,提供了豐富的SQL操作功能。在實際專案開發中,經常會遇到需要大量刪除資料的情況。本文將詳細介紹MyBatis批量刪除語句的使用方法,並附上具體的程式碼範例。使用場景:在資料庫中刪除大量資料時,逐條執行刪除語句效率低。此時,可以使用MyBatis的批次刪除功能

MyBatis快取機制詳解:一文讀懂快取儲存原理引言在使用MyBatis進行資料庫存取時,快取是一個非常重要的機制,能夠有效減少對資料庫的訪問,提高系統效能。本文將詳細介紹MyBatis的快取機制,包括快取的分類、儲存原理和具體的程式碼範例。一、快取的分類MyBatis的快取主要分為一級快取和二級快取兩種。一級緩存一級緩存是SqlSession級別的緩存,當在

iBatis和MyBatis是兩個主流的ORM(Object-RelationalMapping)框架,它們在設計和使用上有著許多相似之處,也存在一些細微的差別。本文將詳細比較iBatis和MyBatis的異同,並透過具體的程式碼範例來說明它們的特點。一、iBatis與MyBatis的歷史與背景iBatis是ApacheSoftwareFoundat

MyBatis是一款流行的Java持久層框架,廣泛應用於各種Java專案。其中,批次插入是常見的操作,可以有效提升資料庫操作的效能。本文將深入探討MyBatis中批量的Insert實作原理,並結合具體的程式碼範例進行詳細解析。 MyBatis中的批次Insert在MyBatis中,批量Insert操作通常使用動態SQL來實作。透過建構一條包含多個插入值的S
