mybatis自定义缓存

mybatis有一级缓存、二级缓存。
一级缓存,也叫本地缓存,默认开启,只作用于SqlSession有效区域。
二级缓存,多个SqlSession共享,相同接口、相同方法、相同参数的查询都可以共享查询结果。二级缓存默认是关闭的,可以使用在mapper文件中使用进行开启

自定义缓存

通过实现Cache接口,可以进行自定义缓存。

package com.zzw.cache;

import org.apache.ibatis.cache.Cache;

import java.util.HashMap;
import java.util.Map;

/**
 * @program: javaweb-02-servlet
 * @description:
 * @author:
 * @create: 2021-04-15 22:08
 **/
public class MyCache implements Cache {

    static Map<Object, Object> objetMap = new HashMap<>();
    private final String id;

    public MyCache(String str) {
        this.id = str;
    }



    @Override
    public String getId() {
        System.out.println("MyCache.getId");
        return id;
    }

    @Override
    public void putObject(Object key, Object value) {
        System.out.println("key = " + key + ", value = " + value);
        objetMap.put(key, value);
    }

    @Override
    public Object getObject(Object key) {
        System.out.println("key = " + key);
        return objetMap.get(key);
    }

    @Override
    public Object removeObject(Object key) {
        System.out.println("key = " + key);
        return objetMap.remove(key);
    }

    @Override
    public void clear() {
        System.out.println("MyCache.clear");
        objetMap.clear();
    }

    @Override
    public int getSize() {
        System.out.println("MyCache.getSize");
        return objetMap.size();
    }
}

使用自定义缓存/第三方缓存

<mapper namespace="com.zzw.mybatis.XmlPersonMapper">
    <cache type="com.zzw.cache.MyCache">cache>
mapper>

缓存属性

  • eviction=“FIFO”
    缓存清理的规则:FIFO,先入先出;LRU:最近最少使用
  • flushInterval=“60000”
    刷新的间隔
  • size=“512”
    默认进行多少查询结果的缓存
  • readOnly=“true”
    缓存结果是否是只读的,如果是只读的,可以直接将缓存结果返回。如果不是,则需要进行缓存对象的拷贝

缓存使用规则

查询先去缓存中获取结果 三方缓存 -> 二级缓存 -> 一级缓存 -> 数据库
获取到结果后,将获取到的结果进行当前缓存级别的缓存。

增、删、改操作,则会将当前缓存进行更新

你可能感兴趣的:(Java,java,mybatis,缓存)