学习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属性即可

猜你喜欢

转载自blog.csdn.net/u010670411/article/details/84450085