1. 程式人生 > >SSM】之MyBatis查詢快取

SSM】之MyBatis查詢快取

        為了減輕資料壓力,提高資料庫的效能,我們往往會需要使用快取。MyBatis為我們提供了一級快取和二級快取。

    (1)一級快取是SqlSession級別的快取,在操作資料庫的時候需要建立一個SqlSession,其中有一個HashMap,用於儲存快取資料。不同的SqlSession之間,其快取資料的HashMap是不同的;

    (2)二級快取是Mapper級別的快取,多個SqlSession去操作同一個Mapper中的SQL語句,則這些SqlSession可以共享二級快取,即二級快取是跨SqlSession的。

        MyBatis的一級快取和二級快取的結構如下圖所示:


1、一級快取

        我們通過一個例子來理解一級快取,如下圖所示:
    (1)當我們第一次查詢ID為1的使用者資訊時,先去快取中查詢快取中是否快取有ID為1的使用者資訊,發現沒有,則去資料庫中查詢,並將查詢結果儲存到快取中;     (2)第二次查詢ID為1的使用者資訊時,去快取中查詢,發現有快取的資料,因此從快取中直接取出資料使用;     (3)如果對資料庫中的資料進行了修改、新增或刪除操作並執行了commit之後,會清空一級快取中的資料(這樣做的目的是為了讓快取中儲存的永遠是最新的資料,避免髒讀);     (4)當我們第三次查詢ID為1的使用者時,先去快取中查詢,如果有則取出來直接用,如果沒有則從資料庫中查詢,然後重新快取到快取中。         MyBatis預設支援一級快取,不需要在配置檔案中進行配置。

2、二級快取

        二級快取的原理與一級快取的原理相似,都是有則取出來直接使用,無則從資料庫中查詢出來後儲存到快取中,如果中途進行了commit操作則清空快取。其基本流程如下圖所示:
        MyBatis中的二級快取預設是關閉的,如果我們想要使用二級快取,則需要對其進行配置:     (1)在SqlMapConfig.xml檔案中配置二級快取的總開關,程式碼如下:
<settings>
	<!-- 開啟二級快取(預設是開的,這裡寫出來是為了方便程式碼維護) -->
	<setting name="cacheEnabled" value="true" />
</settings>
    (2)在XXXMapper.xml檔案中開啟二級快取,程式碼如下:
<!-- 開啟本mapper所在namespace的二級快取 -->
<cache />
    (3)如果想要對某個POJO中的資料進行二級快取,則需要將其序列化:讓這個POJO類實現Serializable介面(這樣做的原因是因為二級快取的資料儲存介質是多種多樣的,不一定只在記憶體中,也可能在硬碟中,甚至是遠端傳輸,因此我們將其序列化,以便將來對其進行反序列化)。         通過以上三個步驟的操作,我們就完成了二級快取的配置,在XXXMapper這個Mapper中的所有資料就都綁定了二級快取機制。         如果我們的某個SQL語句不需要進行二級快取,但這個SQL所在的Mapper已經配置了二級快取,那麼我們只需要在這個statement上設定useCache屬性為false,就可以關閉這個SQL語句的二級快取,程式碼如下:
<select id="selectOrderUserType" resultType="bean_order_user_type" useCache="false">

        當然,MyBatis之所以預設不開啟二級快取,是因為二級快取有一定的侷限性。試想,一個數據表中儲存著上億條資料,如果我們開啟了二級快取,那麼這上億條資料就都儲存到了二級快取中,現在如果我們對其中的一條資料進行了修改並commit提交,那麼這上億條資料就被清空出快取了,即有時候使用二級快取的命中率極低。這種情況也是有解決方案的,就是使用一些比較優秀的快取框架,或使用三級快取。

相關推薦

SSMMyBatis查詢快取

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

SSMMyBatis輸出對映

        MyBatis中的輸出對映有兩種:resultType和resultMap。 1、resultType         使用resultType進行結果對映時,只有當查詢結果中有至少一列的名稱和resultType指定的POJO的某個屬性名稱相同時,才會對

SSMMyBatis逆向工程的使用

        MyBatis逆向工程可以方便的從資料庫中將表自動對映到JAVA POJO類,並同時生成Mapper.xml和Mapper介面,方便實用。下面介紹一下逆向工程的使用方法。         使用逆向工程,我們最好是新建一個JAVA Project,而不要直接

SSMMyBatis插入資料後獲取自增主鍵

        很多時候,我們都需要在插入一條資料後回過頭來獲取到這條資料在資料表中的自增主鍵,便於後續操作。針對這個問題,有兩種解決方案: (1)先插入,後查詢。我們可以先插入一條資料,然後根據插入的資料的各個欄位值,再次訪問資料庫,從資料庫中將剛剛插入的資料查詢出來。當

mybatis查詢快取一級快取

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

SSM框架MyBatis(二)--多表查詢查詢結果對映

使用MyBatis這一強大的框架可以解決很多賦值的問題,其中對於子配置檔案中的小細節有很多需要注意的地方,使用這個框架後主要就是對於配置檔案的編寫和配置。 今天我寫了一個多表查詢,表的基本結構如下: 使用者表t_user:使用者編號uid,賬號account,暱稱nickn

SSMMybatis查詢以及批量操作

這篇文章是在我的SpringMVC前後端資料互動基礎上把資料庫環節打通,主要涉及mybatis的查詢(傳多個引數),批量刪除,新增,修改,資料庫是MySQL,註釋很詳細,直接看程式碼即可: JSP <%@ page language="java" import="ja

hibernate快取查詢快取

        說到hibernate中的快取我們瞭解的比較多的是一級和二級快取,通過前面兩篇部落格的總結我們知道一級和二級快取主要是快取查詢的實體或實體集的,那麼如果我們是通過HQL或SQL語句查詢

ssm整合mybatis配置文件SqlMapConfig.xml

doctype 拷貝 SM pac ctype doc dtd key version <?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE configuration PUBLIC "-//mybatis.or

SSM框架Mybatis的SQL對映檔案寫法

1、單個引數 // UserMapper.java public interface UserMapper { public List<User> getUserListByUserName(String userName); } // UserM

SSM01——MyBatis逆向生成

1.什麼是逆向生成? 我們知道MyBatis 要求我們自己寫sql語句,並且大型網站架構更希望我們對單表進行操作,所以這時候我們就要想怎麼減少自己寫程式碼的量,於是MyBatis 官網提供了一個逆向生成,一般是利用資料庫表生成實體以及對單表的一些操作。 2.My

JavaWeb學習路——SSM框架Mybatis(二)

1.簡介: 框架: 是整個或部分系統的可重用設計,表現為一組抽象構件及構件例項間互動的方法;另一種定義認為,框架是可被應用開發者定製的應用骨架。前者是從應用方面而後者是從目的方面給出的定義。它是一個半成品,一個框架是在一個給定的問題領域內,一個應用程式的一部分設計與實現。

SSM框架Mybatis同時傳入多個物件及普通引數

當傳入多個檔案時,mapper介面檔案的方法引數要使用@param(“xx”)註釋。 例子: mapper: //Student是物件,age是String型別。 int getPojo(@param("student") Student student, @param("age") S

JavaWeb學習路——SSM框架Mybatis(三)

前提:JavaWeb學習之路——SSM框架之Mybatis(二) 1.目錄結構 2.目錄解釋: src下: pojo包:寫java檔案 serverlet包:寫serverlet檔案 service包:寫介面和它的實現類 mapper包:用來配置資料

ssm框架學習---mybatis快取

快取的目的:將部分資料快取到記憶體中,提高系統的效能 一級快取:它是sqlsession級別的,每個sqlsession物件內部都有一個hashmap用來存放查詢的資料,mybatis中預設時開啟的 (1)當執行查詢時,首先如果是第一次查詢,會從資料庫中查詢並將結果快取到一

【機房收費系統組合查詢

         在這個過程中,我明白了,在試著實現某個過程的時候,一定在理清思路的前提下,找到最好的程式碼形式,優中選優,不要在敲程式碼的過程中把自己繞住,能少用巢狀就少用巢狀,只要思路簡單,程式碼結構簡化,在後邊實現的過程中就會減少很多麻煩。這個過程中,我迷茫過,失落過,興奮過。在最後能夠執行的一刻突然感

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

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

mybatis學習查詢快取

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

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