Mybatis分為一二級緩存
一級緩存在SqlSession上? ? (默認情況下開啟,這一級的緩存不需要POJO對象可序列化)
二級緩存在SqlSessionFactory上? ? ? ??
一級緩存:
? ?( 需要提交才能 ) 當代碼對同一個對象進行兩次獲取時歉秫,實際只執(zhí)行一條SQL語句验夯。代碼使用的是同一個SqlSession對象嫡丙。(在緩存沒有超時或是聲明需要刷新時雌芽,就會在緩存獲取數據)
二級緩存:
? ? 能在不同的SqlSession對象之間共享相同的緩存瓶堕。在映射文件(XXXMapper.xml)加入代碼:<cache/>()(Mybatis會將對應的命名夸獎呃逆所有的select元素SQL查詢結果進行緩存麻献。而其中的insert们妥、delete和update語句在操作時會刷新緩存)
? ? 這樣MyBatis會序列化和反序列化對應的POJO,也就要求POJO是一個可序列化對象勉吻。(如何沒有监婶,則會拋出異常,導致運行錯誤)
自定義cache:
1.cache元素的配置項
? ? eviction 緩存策略分為:
? ? ? ? LRU 最近最少使用:移除最長時間不被使用的對象????(默認)
? ? ? ? FIFO 先進先出:按對象進入緩存的順序來移除它們
? ? ? ? SOFT 軟引用:移除基于垃圾回收器狀態(tài)和軟引用規(guī)則對象
? ? ? ? WEAK 弱引用:更積極移除基于垃圾回收器狀態(tài)和弱引用規(guī)則對象
?????type:自定義緩存類(需要實現接口org.apache.ibatis.cache.Cahe)
2.現實中在這便可使用Redis\MongoDB進行常用緩存齿桃。
? ? ?<cache type="xx.RedisCache">
? ? ? ? <property name="host"? value="localhost"/>
????</cache>?
? ? 可調用setHost(String host) 來設置配置內容
? ? 當不需要任何緩存時
? ? <select ... flushCAHE="false" userCache="true"/>
? ? flush代表是否刷新新緩存惑惶,而UserCache屬性則只對select特有,代表是否需要使用緩存.
? ? 當其他的映射器需要數可使用同樣的配置短纵。引用緩存
? ? <cache-ref namespace="xxxx.xxxxMapper"/>