一、一級緩存:算法
MyBatis默認開啓了一級緩存,一級緩存是在sqlSession層面進行緩存的。 即同一個SqlSession屢次調用同一個Mapper和同一個方法的同一個參數,只會進行一次數據庫查詢,而後把數據緩存到緩衝中,之後直接從緩存中直接取出,不會直接查詢數據庫。
sql
可是不一樣的SqlSession對象,由於不一樣的SqlSession都是相互隔離的,因此相同的Mapper、參數和方法,它仍是會再次發送。數據庫
二、二級緩存:緩存
爲了克服一級緩存不一樣SqlSession對象引起的問題,須要開啓二級緩存。二級緩存是緩存的zaiSqlSessionFactory層m面給各個SqlSession對象共享。默認二級緩存是不開啓的,須要手動開啓。安全
2.1 、開啓二級緩存的配置:app
在xx-mapper.xml文件中配置:性能
<!-- 開啓二級緩存(默認參數) --> <cache/>
默認的參數屬性:spa
自定義二級緩存參數:code
<!-- 開啓二級緩存 -->
<cache eviction="LRU" flushInterval="100000" size="1024" readOnly="true"/>
二級緩存的各個參數屬性:xml
- LRU:最少使用原則,移除最長時間不用的對象
- FIFO:先進先出原則,按照對象進入緩存的順序進行回收
- SOFT:軟引用,移除基以垃圾回收器和軟引用規則的對象
- WEAK:弱引用,更積極的移除基以垃圾回收器和軟引用規則的對象
能夠在Mapper的具備方法下設置對二級緩存的訪問意願:
若是一條語句每次都須要最新的數據,就意味着每次都須要從數據庫查詢數據,能夠把這個屬性設置爲false,如:
<select id="selectAll" resultMap="BaseResultMap" useCache="false">
flushCache刷新緩存(就是清空緩存)
二級緩存默認會在insert、update、delete操做後刷新緩存,能夠手動配置不更新緩存,以下:
<update id="updateById" parameterType="User" flushCache="false" />