1. 程式人生 > >學習Mybatis(3):快取

學習Mybatis(3):快取

Mybatis預設只開啟了一級快取(SqlSession級),沒有開啟二級快取(SqlSessionFactory級),需要開啟的話,可以在Mapper檔案中寫上

<cache/>

快取開啟後:

1.需要使用SqlSession::commit()方法才會提交操作

2.如果resultType是一個POJO類,那麼需要實現Serializeable介面

沒有特定配置的情況下:

如果使用select操作,會優先從快取讀取值

如果使用了insert、update、delete等操作,會重新整理快取

也可以使用flushCache或useCache進行控制

例如:

<select id="…" resultType="…" parameterType="…" useCache="false">……</select>

就不會從二級快取讀取

<insert id="…" parameterType="…" flushCache="false">……</insert>

就不會重新整理快取

 

cache標籤的高階屬性:

  • eviction:回收策略,有LRU、FIFO、SOFT、WEAK等
  • flushInterval:重新整理間隔,單位ms
  • size:快取大小(個)
  • readOnly:是否允許修改
  • type:快取型別,用來使用自定義快取

 

自定義快取

Mybatis快取是基於HashMap實現的(org.apache.ibatis.cache.impl.PerpetualCache類),如果想用更高階的快取(比如Redis),需要自己實現

方法:實現Cache介面

介面如下:

package org.apache.ibatis.cache;

import java.util.concurrent.locks.ReadWriteLock;

public interface Cache {
    String getId();

    void putObject(Object var1, Object var2);

    Object getObject(Object var1);

    Object removeObject(Object var1);

    void clear();

    int getSize();

    ReadWriteLock getReadWriteLock();
}

實現以後,將實現類配置到cache標籤的type屬性即可