1. 程式人生 > >mybatis的查詢快取

mybatis的查詢快取

查詢快取

mybatis提供查詢快取,用於減輕資料壓力,提高資料庫效能。

mybatis提供一級快取和二級快取

一級快取是SqlSession級別的快取。在操作資料庫時需要構造sqlSession物件,在物件中有一個數據結構(HashMap)用於儲存快取資料。不同的sqlSession之間的快取資料區域(HashMap)是互相不影響的。

二級快取是mapper級別的快取,多個SqlSession去操作同一個mapper的sql語句,多個SqlSession可以共用二級快取,二級快取是跨SqlSession的。

 一級快取

工作原理

第一次發起查詢使用者id為1的使用者資訊,先去找快取中是否有id為1的使用者資訊,如果沒有,從資料庫查詢使用者資訊。得到使用者資訊,將使用者資訊儲存到一級快取中。如果sqlSession去執行commit操作(執行插入,更新,刪除),清空SqlSession中的一級快取,這樣做的目的是為了讓快取中儲存的是最新資訊,避免髒讀。 第二次發起查詢使用者id為1的使用者資訊,先去找快取中是否有id為1的使用者資訊,快取中有,直接從快取中獲取使用者資訊。

Mybatis預設支援一級快取,不需要在配置檔案中配置。

一級快取應用:

正式開發,是將mybatis和spring進行整合開發,事物控制在service中。

一個service方法中包括很多mapper方法呼叫。

service{

//開始執行時,開啟事物,建立SqlSession物件

//第一次呼叫mapper的方法findUserById(1)

//第二次呼叫mapper的方法findUserById(1),從一級快取中取資料

//方法結束,sqlSession關閉

}

如果是執行兩次service呼叫查詢相同的使用者資訊,不走一級快取,因為session方法結束,

sqlSession就關閉,一級快取就清空。

二級快取

工作原理

首先開啟mybatis的二級快取。

sqlSession1去查詢使用者id為1的使用者資訊,查詢到使用者資訊會將查詢資料儲存到二級快取中。

如果sqlSession3去執行相同mapper下sql,執行commit提交,清空該mapper下的二級快取區域的資料。

sqlSession2去查詢使用者id為1的使用者資訊,去快取中找是否存在資料,如果存在直接從快取中取出資料。

二級快取與一級快取區別:

二級快取的範圍更大,多個sqlSession可以共享一個UserMapper的二級快取區域。UserMapper有一個二級快取區域(按namespace分),其它mapper也有自己的二級快取區域(按namespace分)。每一個namespace的mapper都有一個二級快取區域,兩個mapper的namespace如果相同,這兩個mapper執行sql查詢到資料將存在相同的二級快取區域中。

開啟二級快取

mybatis的二級快取是mapper範圍級別,除了在SqlMapConfig.xml設定二級快取的總開關,還要在具體的mapper.xml中開啟二級快取。

在核心配置檔案SqlMapConfig.xml中加入

<setting name="cacheEnabled" value="true" />

在UserMapper.xml中開啟二級快取,UserMapper.xml下的sql執行完成會儲存到它的快取區域(HashMap)。

<mapper namespace="com.zucc.dao.UserMapper">
	<!-- 開啟本mapper的namespace下的二級快取 -->
	<cache/>

禁用快取

在statement中設定userCache=false可以禁用當前select語句的二級快取,即每次查詢都會發出sql去查詢,預設情況是true,即使用二級快取。

<select id="findUserById" parameterType="int" resultType="User" useCache="false">

總結:針對每次查詢都需要最新的資料sql,要設定成useCache=false,禁用二級快取。

重新整理快取:

在mapper的同一個namespace中,如果有其它insert,update,delete操作資料後需要重新整理快取,如果不執行重新整理快取會出現髒讀。

設定statement配置中的flushCache=”true”屬性,預設情況下為true即重新整理快取,如果改成false則不會重新整理。使用快取時如果手動修改資料庫表中的查詢資料會出現髒讀。

<insert id="insertUser" parameterType="User" flushCache="true"> 

總結:一般執行完commit操作都需要重新整理快取,flushCache=true表示重新整理快取,這樣可以避免資料庫髒讀。






相關推薦

mybatis查詢快取之一級快取

什麼是查詢快取?   快取是介於應用程式和物理資料來源之間   mybatis提供查詢快取,用於減輕資料壓力,提高資料庫效能。   mybaits提供一級快取,和二級快取。    一級快取是sqlSession級別的快取。在操作資料庫時需要構造sqlSession物件,在物件中有一個數據結構(Has

Spring+SpringMVC+MyBatis深入學習及搭建(八)——MyBatis查詢快取

1.什麼是查詢快取 mybatis提供查詢快取,用於減輕資料庫壓力,提高資料庫效能。 mybatis提供一級快取和二級快取。 一級快取是SqlSession級別的快取。在操作資料庫時需要構造sqlSession物件,在物件中有一個數據結構(HashMap)用於儲存快取資料。不同的sqlSession之間

SSM】之MyBatis查詢快取

        為了減輕資料壓力,提高資料庫的效能,我們往往會需要使用快取。MyBatis為我們提供了一級快取和二級快取。     (1)一級快取是SqlSession級別的快取,在操作資料庫的時候需要建立一個SqlSession,其中有一個HashMap,用於儲存快取資料

Mybatis(3、延遲載入、查詢快取、與ehcache整合、逆向工程、與spring整合)

版權宣告:本文為博主原創文章,未經博主允許不得轉載。    https://blog.csdn.net/www1056481167/article/details/70597788 延遲載入 延遲載入:先從單表查詢、需要時再從關聯表去關聯查詢,大大提高 資料庫效能,因為

(二十一)Mybatis一級查詢快取

注:程式碼已託管在GitHub上,地址是:https://github.com/Damaer/Mybatis-Learning ,專案是mybatis-17-sqlsessionCache,需要自取,需要配置maven環境以及mysql環境(sql語句在resource下的test.sq

mybatis中的查詢快取例項

mybatis中的查詢快取 一: 查詢快取   Mybatis提供查詢快取,用於減輕資料壓力,提高資料庫壓力。   Mybatis提供一級快取和二級快取。 在操作資料庫時需要構造SqlSession物件,在物件中有一個數據結構(HashMap)用於快取資料。 不

mybatis學習之查詢快取

編寫mapper.xml,配置tyoe為ehcache對cache介面的實現型別 <!-- 開啟本mapper的namespace下的二級快取 type:指定cache介面的實現類的型別,預設使用PerpetualCache,要和EhCache整合,需要配置type為ehcac

mybatis查詢快取

查詢快取 mybatis提供查詢快取,用於減輕資料壓力,提高資料庫效能。 mybatis提供一級快取和二級快取 一級快取是SqlSession級別的快取。在操作資料庫時需要構造sqlSession物件,在物件中有一個數據結構(HashMap)用於儲存快取資料。不同的sql

Mybatis一級快取導致分散式環境下的查詢髒資料

    Mybatis一級快取,也稱本地快取,預設是SqlSession級別的快取。在一次程式與資料庫的會話(Sqlsession)中,mybatis會維護一個以hashmap為儲存結構的一級快取,在這個會話中,只要在兩次相同條件的查詢中間,這個會話裡沒有出現增刪改的操作,那

Mybatis框架】查詢快取(二級快取

       繼上一篇部落格,我們講述了mybatis的一級快取,接下來,我們來學習一下mybatis的二級快取 部落格連結地址: http://blog.csdn.net/liweizhong1

JAVAWEB開發之mybatis詳解(二)——高階對映、查詢快取mybatis與Spring整合以及懶載入的配置和逆向工程

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" "ht

Mybatis框架】查詢快取(一級快取

       做java的各位程式設計師們,估計SSH和SSM是我們的基礎必備框架。也就是說我們都已經至少接觸過了這兩套常見的整合框架。當我們用SSH的時候,相信很多人都接觸過Hibernate的

mybatis高階知識(四)&查詢快取

1.查詢快取 1.1什麼是查詢快取 mybatis提供查詢快取,用於減輕資料壓力,提高資料庫效能 mybatis提供一級快取二級快取 一級快取是SQLSession級別的快取 在操作

mybatis學習筆記(15)-查詢快取之二級快取

本文主要講mybatis的二級快取,二級快取是mapper級別的快取,多個SqlSession去操作同一個Mapper的sql語句,多個SqlSession可以共用二級快取,二級快取是跨SqlSession的。 二級快取原理 首先開啟mybatis的二級快取. sqlS

Spring+SpringMVC+MyBatis深入學習及搭建(八)——MyBatis查詢緩存

idt rtu void spring 寫到 查詢緩存 修改 針對 target 轉載請註明出處:http://www.cnblogs.com/Joanna-Yan/p/6956206.html 前面講到:Spring+SpringMVC+MyBatis深入學習及搭建(

使用MyBatis查詢 返回類型為int,但是當查詢結果為空NULL,報異常的解決方法

ati bin turn apache led .get urn bsp process 使用MyBatis查詢 返回類型為int,但是當查詢結果為空NULL,會報異常。 例如: <select id="getPersonRecordId" parameterT

Mybatis查詢select操作

自動完成 分享 簡單 就是 映射 對象的引用 from 配置文件 相關 先看select標簽的屬性: 說幾點: resultType和resultMap都是用來表示結果集的類型的,resultType用於簡單的HashMap或者是簡單的pojo對象,而resultSe

關於mybatis查詢集合返回為[null]的問題

sql查詢 http 分享圖片 null ima 必須 如果 lis bubuko 最近項目當中做功能遇到查詢集合list為null,判非空卻還是進入了非空的判斷裏面,後面才知道sql查詢中 如果你是查詢幾個字段,必須加上不為空,否則sql查詢前面的值是有值得,只是恰巧你查

mybatis查詢mysql的datetime類型數據時間差了14小時

ati onf caption centos 數據庫時間 charset format 類型轉換 .get 今天使用mybatis查詢mysql中的數據時,莫名其妙的所有時間都出錯了,所有時間都比數據庫時間多了14小時,考慮了一下,初步判定是系統時區的問題。因為mysql

mybatis快取問題

1) 一級快取    每個sqlsession都有一個一級快取,只要sql語句和引數相同,只有第一次查詢資料庫,並且會把查詢結果放入一級快取之後的查詢,就直接從一級快取中獲取結果。        一級快取的作用範圍,只限於一個sqlsess