myBatis自帶的快取配置(Cache)
版權宣告:本文為博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/sotong006/article/details/78878820
如果要實現 mybatis 的二級快取,一般來說有如下兩種方式:
1. 採用 mybatis 內建的 cache 機制。
2. 採用三方 cache 框架, 比如ehcache, oscache 等等.
採用 mybatis 內建的 cache 機制。
在 sql 語句對映檔案中加入 <cache /> 語句 , 並且相應的 model 類要實現 java Serializable 介面,因為快取說白了就是序列化與反序列化的過程,所以需要實現這個介面. 單純的 <cache /> 表示如下意思:
1.所有在對映檔案裡的 select 語句都將被快取。
2.所有在對映檔案裡 insert,update 和 delete 語句會清空快取。
3.快取使用“最近很少使用”演算法來回收
4.快取不會被設定的時間所清空。
5.每個快取可以儲存 1024 個列表或物件的引用(不管查詢出來的結果是什麼) 。
6.快取將作為“讀/寫”快取,意味著獲取的物件不是共享的且對呼叫者是安全的。不會有其它的呼叫者或執行緒潛在修改。
快取元素的所有特性都可以通過屬性來修改
一、MyBatis的Cache配置
1、全域性開關:預設是true,如果它配成false,其餘各個Mapper XML檔案配成支援cache也沒用。
<settings>
<setting name="cacheEnabled" value="true"/>
</settings>
2、各個Mapper XML檔案,預設是不採用cache。在配置檔案加一行就可以支援cache:
<cache />
3、Mapper XML檔案配置支援cache後,檔案中所有的Mapper statement就支援了。此時要個別對待某條,需要:
<select id="inetAton" parameterType="string" resultType="integer" useCache=“false”>
select inet_aton(#{name})
</select>
二、注意的幾個細節
1、如果readOnly為false,此時要結果集物件是可序列化的。
<cache readOnly="false"/>
2、在SqlSession未關閉之前,如果對於同樣條件進行重複查詢,此時採用的是local session cache,而不是上面說的這些cache。
3、MyBatis快取查詢到的結果集物件,而非結果集資料,是將對映的PO物件集合快取起來。
說意義不大是在於:
a、面對一定規模的資料量,內建的cache方式就派不上用場了;
b、對查詢結果集做快取並不是MyBatis框架擅長的,它專心做的應該是sql mapper。採用此框架的Application去構建快取更合理,比如採用OSCache、Memcached啥的。
採用 ehcache 來實現 mybatis 的二級快取參考上一個文件;
轉載:http://blog.sina.com.cn/s/blog_5673f78b0100v47z.html
---------------------
作者:sotong006
來源:CSDN
原文:https://blog.csdn.net/sotong006/article/details/78878820
版權宣告:本文為博主原創文章,轉載請附上博文連結!