mybatis缓存的使用

mybatis的缓存是在mapper文件中配置的

<cache type="com.***.mybatis.cache.MyCache"/>

框架默认提供了几种缓存类型:

  1. LRU:最近最少使用
  2. FIFO:先进先出
  3. SOFT:软引用
  4. WEAK:弱引用

以上方式,基本上都是使用JAVA的Deque,HashMap,SoftReference,WeakReference存储,因此存储是占用堆内存的。存储的数量不易过大。

另外mybatis为每个mapper(每个namespace)创建一个cache类。

如果你在一个mapper中关联查询了另外一张表,不可能通过关联表的操作来flush当前表的缓存。

另外你可以自定义缓存,采用分布式缓存,自定义cache如下:

id是当前mapper的namespace

public class MyCache implements Cache {
    private String id;
    private Map<String, Object> result = new HashMap<>();

    public MyCache(String id){
        this.id = id;
    }
    @Override
    public String getId() {
        return this.id;
    }

    @Override
    public void putObject(Object o, Object o1) {
        result.put(o.toString(), o1);
    }

    @Override
    public Object getObject(Object o) {
        return result.get(o.toString());
    }

    @Override
    public Object removeObject(Object o) {
        return result.remove(o.toString());
    }

    @Override
    public void clear() {
        result.clear();
    }

    @Override
    public int getSize() {
        return result.size();
    }

    @Override
    public ReadWriteLock getReadWriteLock() {
        return null;
    }
}

每个更新操作,都带有flushCache,每个查询操作都带有useCache

    <select id="getById" resultType="com.***.mybatis.entity.TestEntity" useCache="true">
        -----
    </select>
    <update id="updateById" flushCache="true">
        update TEST set name =#{name} where id=#{id}
    </update>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值