MyBatis - 缓存Cache

    MyBatis的缓存包括系统缓存和自定义缓存,而系统缓存又包括一级缓存和二级缓存。    

MyBatis系统缓存:

        MyBatis对缓存提供支持,但是在没有配置的默认情况下,它只开启一级缓存。

  1.   一级缓存只是相对于同一个SqlSession而言:


    我们发现第一个SqlSession实际只发生过一次查询,而第二次查询就从缓存中取出了,也就是SqlSession层面的一级缓存,它在各个SqlSession是相互隔离的。

    2.   二级缓存是在SqlSessionFactory层面上,默认情况下是不开启的。二级缓存的开启需要进行配置,实现二级缓存的时候,MyBatis要求返回的POJO必须是可序列化的,也就是要求实现Serializable接口,配置的方法很简单,只需要映射XML文件配置就可以开启缓存.

    <cache/>

 例子:

<cache eviction="LRU" flushInterval="100000" size="1024" readOnly="true"/>
  •  eviction: 代表的是缓存回收策略,目前MyBatis提供以下策略。
  1. LRU,(Least Recently Used)最近最少使用的,移除最长时间不用的对象。
  2. FIFO,先进先出,按对象进入缓存的顺序来移除它们。
  3. SOFT,软引用,移除基于垃圾回收器状态和软引用规则的对象。
  4. WEAK,弱引用,更积极地移除基于垃圾收集器状态和若引用规则的对象。
  • flushInterval: 刷新间隔时间,单位为毫秒,这里配置的是100秒刷新,如果不不配置它,那么当SQL被执行的时候才会去刷新缓存。
  • size: 引用数目,一个正整数,代表缓存最多可以存储多少个对象,不宜设置过大。设置过大会导致内存溢出。这里配置的是1024个对象。
  • readOnly: 只读,意味着缓存数据只能读取而不能修改,这样设置的好处是我们可以快速读取缓存,缺点是我们没有办法修改缓存,它的默认值为false,不允许我们修改。

自定义缓存:

    系统缓存是MyBatis应用机器上的本地缓存,但是在大型服务器上,会使用各类不同的缓存服务器,这个时候我们可以定制缓存。要实现定制缓存我们要实现MyBatis提供的如下接口

org.apache.ibatis.cache.Cache
	@Override
	public void clear() {
		// TODO Auto-generated method stub

	}

	@Override
	public String getId() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public Object getObject(Object arg0) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public ReadWriteLock getReadWriteLock() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public int getSize() {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public void putObject(Object arg0, Object arg1) {
		// TODO Auto-generated method stub

	}

	@Override
	public Object removeObject(Object arg0) {
		// TODO Auto-generated method stub
		return null;
	}

配置自定义缓存:

<cache type="com.learn.chapter1.cache.MyCache">


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值