Mybatis中的緩存:
什么是緩存?
? 存在于內(nèi)存中的臨時數(shù)據(jù)。
為什么使用緩存?
? 減少與數(shù)據(jù)庫的交互次數(shù),提高執(zhí)行的效率。
什么數(shù)據(jù)使用于緩存,什么樣的數(shù)據(jù)不能使用?
? 適用于緩存:經(jīng)常查詢并且不經(jīng)常改變的。數(shù)據(jù)的正確性對最終的結(jié)果影響不大。
? 不適用于緩存:經(jīng)常改變的數(shù)據(jù)。數(shù)據(jù)的正確與否對最終的結(jié)果影響很大。例如商品的庫存、銀行的匯率、股市的牌價。
一級緩存:
? 它指的是MyBatis中Sqlsession對象的緩存。
? 當(dāng)我們執(zhí)行查詢之后,查詢的結(jié)果會同時存入到SqlSession為我們提供一塊區(qū)域中。該區(qū)域的結(jié)構(gòu)是一個Map。當(dāng)我們再次查詢同樣的數(shù)據(jù),MyBatis會先去Sqlsession中查詢是否有,有的話直接拿出來,當(dāng)SqlSession對象消失時,MyBatis的一級緩存也就消失了。具體情況:當(dāng)調(diào)用sqlseesion的修改,添加,刪除,commit(),close()等方法時,就會清空一級緩存。
二級緩存:
? 它指的是MyBatis中SqlSessionFactory對象的緩存,由同一個SQLSessionFactory對象創(chuàng)建的SQLSession共享其緩存。二級緩存存入的是數(shù)據(jù)。
二級緩存的使用步驟:
? 第一步:讓MyBatis框架支持二級緩存(主配置文件)
<settings>
? <setting name="cacheEnable" value="true">
</settings>
描述:全局的開啟或關(guān)閉配置文件中的所有映射器已經(jīng)配置的任何緩存,默認(rèn)值就是true。
? 第二步:讓當(dāng)前的映射文件支持二級緩存(映射文件中配置)
<!--開啟文件支持二級緩存-->
<cache><cache/>
? 第三步:讓當(dāng)前的操作支持二級緩存(在select標(biāo)簽中進(jìn)行配置,useCache)
<select id="find" useCache="true">
select * from user where id = #{id}
</select>
注意:實現(xiàn)二級緩存要將實體類實現(xiàn)Serializable接口(啟用其序列化功能的接口)。
開啟了二級緩存后,還需要將要緩存的pojo實現(xiàn)Serializable接口,為了將緩存數(shù)據(jù)取出執(zhí)行反序列化操作,因為二級緩存數(shù)據(jù)存儲介質(zhì)多種多樣,不一定只存在內(nèi)存中,有可能存在硬盤中,如果我們要再取這個緩存的話,就需要反序列化了。所以建議mybatis中的pojo類都實現(xiàn)Serializable接口。