1. 程式人生 > >mybatis快取詳解

mybatis快取詳解

mybatis提供了快取機制減輕資料庫壓力,提高資料庫效能 mybatis的快取分為兩級:一級快取、二級快取 一級快取是SqlSession級別的快取,快取的資料只在SqlSession內有效 二級快取是mapper級別的快取,同一個namespace公用這一個快取,所以對SqlSession是共享的 一級快取:   mybatis的一級快取是SqlSession級別的快取,在操作資料庫的時候需要先建立SqlSession會話物件,在物件中有一個HashMap用於儲存快取資料,此HashMap是當前會話物件私有的,別的SqlSession會話物件無法訪問。 具體流程:       1.第一次執行select完畢會將查到的資料寫入SqlSession內的HashMap中快取起來       2.第二次執行select會從快取中查資料,如果select相同且傳引數一樣,那麼就能從快取中返回資料,不用去資料庫了,從而提高了效率   注意事項:
      1.如果SqlSession執行了DML操作(insert、update、delete),並commit了,那麼mybatis就會清空當前SqlSession快取中的所有快取資料,這樣可以保證快取中的存的資料永遠和資料庫中一致,避免出現髒讀       2.當一個SqlSession結束後那麼他裡面的一級快取也就不存在了,mybatis預設是開啟一級快取,不需要配置       3.mybatis的快取是基於[namespace:sql語句:引數]來進行快取的,意思就是,SqlSession的HashMap儲存快取資料時,是使用[namespace:sql:引數]作為key,查詢返回的語句作為value儲存的。
二級快取:   二級快取是mapper級別的快取,也就是同一個namespace的mapper.xml,當多個SqlSession使用同一個Mapper操作資料庫的時候,得到的資料會快取在同一個二級快取區域   二級快取預設是沒有開啟的。需要在setting全域性引數中配置開啟二級快取   mybatis-config.xml: <setting name="cacheEnabled" value="true"/> 預設是 false:關閉 在userMapper.xml中配置: <
cache />當前mapper下所有語句開啟二級快取
  若想禁用當前select語句的二級快取,新增useCache="false"修改如下: <select id="getCountByName" parameterType="java.util.Map" resultType="INTEGER" statementType="CALLABLE" useCache="false">   具體流程:       1.當一個sqlseesion執行了一次select後,在關閉此session的時候,會將查詢結果快取到二級快取       2.當另一個sqlsession執行select時,首先會在他自己的一級快取中找,如果沒找到,就回去二級快取中找,找到了就返回,就不用去資料庫了,從而減少了資料庫壓力提高了效能    注意事項:       1.如果SqlSession執行了DML操作(insert、update、delete),並commit了,那麼mybatis就會清空當前mapper快取中的所有快取資料,這樣可以保證快取中的存的資料永遠和資料庫中一致,避免出現髒讀       2.mybatis的快取是基於[namespace:sql語句:引數]來進行快取的,意思就是,SqlSession的HashMap儲存快取資料時,是使用[namespace:sql:引數]作為key,查詢返回的語句作為value儲存的。           3.實體類物件必須要實現序列化介面   查詢規則: 1、先判斷二級快取是否開啟,如果沒開啟,再判斷一級快取是否開啟,如果沒開啟,直接查資料庫 2、如果一級快取關閉,即使二級快取開啟也沒有資料,因為二級快取的資料從一級快取獲取 3、一般不會關閉一級快取 4、二級快取預設不開啟 5、如果二級快取關閉,直接判斷一級快取是否有資料,如果沒有就查資料庫 6、如果二級快取開啟,先判斷二級快取有沒有資料,如果有就直接返回;如果沒有,就查詢一級快取,如果有就返回,沒有就查詢資料庫;   /*一級快取(sqlsession級別的快取,預設開啟): *       同一個sqlsession執行相同的sql語句,第二次直接從快取獲取 * 二級快取(mapper基本的快取,預設關閉,基本上不用,實際中也不怎麼用): *       不同的sqlsession執行同樣的sql語句也會快取 * *   開啟二級快取步驟: *         1.設定settings,<setting name="cacheEnabled" value="true"/> *         2.在mapper檔案裡面配置快取的屬性 *            <cache/> *         3.測試 * *      注意點:二級快取是將整個物件以流的形式儲存到快取,所有需要序列化物件,需要讓實體類序列化 *

相關推薦

mybatis快取

mybatis提供了快取機制減輕資料庫壓力,提高資料庫效能 mybatis的快取分為兩級:一級快取、二級

MyBatis(七):MyBatis快取(一級快取/二級快取)

1. 一級快取 ​ MyBatis一級快取上SqlSession快取,即在統一SqlSession中,在不執行增刪改操作提交事務的前提下,對同一條資料進行多次查詢時,第一次查詢從資料庫中查詢,完成後會存入快取,其餘從快取中直接讀取。MyBatis一級快取預設開啟。 ![](https://i

MyBatis一級快取和二級快取

一級快取   Mybatis對快取提供支援,但是在沒有配置的預設情況下,它只開啟一級快取,一級快取只是相對於同一個SqlSession而言。所以在引數和SQL完全一樣的情況下,我們使用同一個SqlSession物件呼叫一個Mapper方法,往往只執行一次SQL,因為使用SelSession第一次

Mybatis的一級快取和二級快取

注:本筆記是根據尚矽谷的MyBatis視訊記錄的 對於任何一個持久層框架,都有快取機制;快取在電腦中有一塊真實的儲存空間(https://baike.baidu.com/item/%E7%BC%93%E5%AD%98/100710?fr=aladdin); 兩個關於mybatis快取額外的連

mybatis 基礎

batis 添加用戶 主鍵 actor cor @override iba 基本功 ide 轉 https://www.cnblogs.com/Mr-Kenson/p/8124680.html mybatis 是一個開源的 用於對數據庫操作的框架, 讀者基本都大體了解其

Yii2頁面快取

頁面快取指的是在伺服器端快取整個頁面的內容。隨後當同一個頁面 被請求時,內容將從快取中取出,而不是重新生成。 舉例說明 class TestController extends Controller{     // 該方法會在其他方法之前執行   

spring+springmvc+mybatis整合

一,導包 1,建立一個web工程,匯入spring,springmvc,mybatis需要的jar包 2,下載適配包Mybatis-Spring.jar(或者寫依賴),不同版本的spring和mybatis需要的適配包不同 二,web.xml (在WEB-INF目錄下) 1,載

Hibernate與Mybatis區別

1. hibernate是全自動,而mybatis是半自動 hibernate完全可以通過物件關係模型實現對資料庫的操作,擁有完整的JavaBean物件與資料庫的對映結構來自動生成sql。而mybatis僅有基本的欄位對映,物件資料以及物件實際關係仍然

MySQL查詢快取

參考文件:https://www.cnblogs.com/Alight/p/3981999.html 一:快取條件,原理 MySQL Query Cache是用來快取我們所執行的SELECT語句以及該語句的結果集,MySql在實現Query Cache的具體技術細節上類似典型的K

Linux快取及相關操作

一、快取機制介紹 在Linux系統中,為了提高檔案系統性能,核心利用一部分實體記憶體分配出緩衝區,用於快取系統操作和資料檔案,當核心收到讀寫的請求時,核心先去快取區找是否有請求的資料,有就直接返回,如果沒有則通過驅動程式直接操作磁碟。 快取機制優點:減少系統呼叫次數,降低CPU上下文切換

瀏覽器快取

瀏覽器快取分為兩種型別: 強快取:也稱為本地快取,不向伺服器傳送請求,直接使用客戶端本地快取資料 協商快取:也稱304快取,向伺服器傳送請求,由伺服器判斷請求檔案是否發生改變。如果未發生改變,則返回304狀態碼,通知客戶端直接使用本地快取;如果發生改變,則直接返回請求檔案

mybatis配置

1.SqlMapConfig.xml configuration作為根標籤有如下子標籤,dtd資訊已經將其子標籤出現的順序以及次數規定好了 <1>properties(屬性),該標籤中有resource(類路徑)或url(檔案路徑例:url=”file:/

Mybatis 坑路2 -> MyBatis 配置

####使用 XML 配置 MyBatis   Mybatis 最關鍵的組成部分是 SqlSessionFactory,我們可以從中獲取 SqlSession,並執行對映的 SQL 語句。   SqlSessionFactory 物件可以通過基

Mybatis使用和入門案例

前言 MyBatis和Hibernate一樣,是一個優秀的持久層框架。已經說過很多次了,原生的jdbc操作存在大量的重複性程式碼(如註冊驅動,建立連線,建立statement,結果集檢測等)。框架的作用就是把這些繁瑣的程式碼封裝,這樣可以讓程式設計師專注於sql語句本身。

Maven搭建SpringMVC+Mybatis專案

前言          最近比較閒,複習搭建一下專案,這次主要使用Spring+SpringMVC+Mybatis。專案持久層使用Mybatis3,控制層使用SpringMVC4.1,使用Spring4.1管理控制器,資料庫連線池使用druid資料來源,該項資料庫暫使用My

MyBatis Generator

MyBatis Generator中文文件地址:該中文文件由於儘可能和原文內容一致,所以有些地方如果不熟悉,看中文版的文件的也會有一定的障礙,所以本章根據該中文文件以及實際應用,使用通俗的語言來講解詳細的配置。本文中所有節點的連結都是對應的中文文件地址,可以點選檢視詳細資訊。注:本文後面提到的MBG全部指代M

MyBatis 開發

Mybatis是什麼—基於Java的持久層框架 MyBatis 本是apache的一個開源專案iBatis, 2010年這個專案由apache software foundation 遷移到了google code,並且改名為MyBatis 。2013年

mybatis TypeHandler

1.TypeHandler概念 TypeHandler,型別轉換器,在mybatis中用於實現java型別和JDBC型別的相互轉換.mybatis使用prepareStatement來進行引數設定的時候,需要通過typeHandler將傳入的java引數設定成

JAVAORM框架之Mybatis (Ibatis)

agen r.java文件 conn soc 部分 ppr jdbc project shm 目錄 Mybatis基礎概念 Mybatis開放方式演進 Mybatis框架核心要點 關聯查詢 延遲加載(懶加載) 動態SQL Mybatis緩存 Mybatis逆向工程 Pag

MyBatis學習(1):Mybatis使用和入門案例

前言 MyBatis和Hibernate一樣,是一個優秀的持久層框架。已經說過很多次了,原生的jdbc操作存在大量的重複性程式碼(如註冊驅動,建立連線,建立statement,結果集檢測等)。框架的作用就是把這些繁瑣的程式碼封裝,這樣可以讓程式設計師專注於sq