1. 程式人生 > 實用技巧 >使用bmp和selenium抓取瀏覽器的請求和結果

使用bmp和selenium抓取瀏覽器的請求和結果

MyBatis快取機制

快取機制減輕資料庫壓力,提高資料庫效能

mybatis的快取分為兩級:一級快取、二級快取

一級快取:

一級快取為 sqlsesson 快取,快取的資料只在 SqlSession 內有效。在操作資料庫的時候需要先建立 SqlSession 會話物件,在物件中有一個 HashMap 用於儲存快取資料,此 HashMap 是當前會話物件私有的,別的 SqlSession 會話物件無法訪問。

具體流程:

第一次執行 select 完畢會將查到的資料寫入 SqlSession 內的 HashMap 中快取起來

第二次執行 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 的 mappe.xml ,當多個 SqlSession 使用同一個 Mapper 操作資料庫的時候,得到的資料會快取在同一個二級快取區域

二級快取預設是沒有開啟的。需要在 setting 全域性引數中配置開啟二級快取

開啟二級快取步驟:

1、conf.xml 配置全域性變數開啟二級快取

<settings>
    
        <setting name="cacheEnabled" value="true"/>預設是false:關閉二級快取

<settings>

2、在userMapper.xml中配置

<cache eviction="LRU" flushInterval="60000" size="512" readOnly="true"/>當前mapper下所有語句開啟二級快取

這裡配置了一個LRU快取,並每隔60秒重新整理,最大儲存512個物件,而卻返回的物件是隻讀的

若想禁用當前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 儲存的。


引自:https://www.w3cschool.cn/mybatis/mybatis-xlc73bt4.html