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