缓存机制(二级缓存)

        二级缓存也称为sqlsessionFactory级缓存,通过同一个factory获取的sqlsession可以共享二级缓存,在应用服务器中sqlsessionfactory是单例的,因此二级缓存可以实现全局共享

特性:

1、二级缓存默认是没有开启的,需要在mybatis-config.xml文件中通过<Setting>标签进行手动开启
2、二级缓存只能缓存实现序列化接口的对象

使用步骤:

1、在mybatis-config.xml开启使用二级缓存

 <settings>
        <setting name="cacheEnabled" value="true"/>
    </settings>

2、在需要使用二级缓存的mapper文件中,使用<cache>标签使用功能二级缓存

cache标签属性
1、eviction: 缓存的回收策略,默认是LRU
2、LRU - 最近最少使用的:移除最长时间不被使用的对象
3、FIFO - 先进先出策略:按对象进入缓存的顺序来移除它们
4、SOFT - 软引用:移除基于垃圾回收器状态和软引用规则的对象
5、WEAK - 弱引用:更积极地移除基于垃圾收集器状态和弱引用规则的对象
6、flushInterval:缓存的刷新间隔,默认是不刷新的
7、readOnly:缓存的只读设置,默认是false
8、true:只读 mybatis认为只会对缓存中的数据进行读取操作,不会有修改操作 为了加快数据的读取,直接将缓存中对象的引用交给用户
9、false:不只读 mybatis认为不仅会有读取数据,还会有修改操作。 会通过序列化和反序列化的技术克隆一份新的数据交给用户
10、size:缓存中的对象个数
11、type:自定义缓存或者整合第三方缓存时使用 class MyCache implements Cache{}

3、被缓存的实体类实现Serializable接口

package com.qhit.pojo;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;

import java.io.Serializable;

/**
 * Description: member_RemSql
 * Created by WuHuaSen .
 * Created Date:  2022/4/7 8:14
 * Version:  V1.0
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
@ToString
public class Member implements Serializable{
    private  int MemberId;
    private String MemberNick;
    private  String MemberGender;
    private int MemberAge;
    private  String MemberCity;
}

4、在测试的时候,第一次查询之后执行,需要提交,查询的结果才会提交缓存到二级缓存中 

package com.qhit.Dao;

import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.qhit.Untils.MybatisUtil;
import com.qhit.pojo.Member;
import com.qhit.pojo.MemberSearchCondition;
import com.sun.xml.internal.ws.api.model.MEP;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.junit.Test;
import org.omg.CORBA.PUBLIC_MEMBER;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;

/**
 * Description: member_RemSql
 * Created by WuHuaSen .
 * Created Date:  2022/4/7 8:31
 * Version:  V1.0
 */
public class MemberDaoTest {
    MybatisUtil mybatisUtil = new MybatisUtil();

 
    @Test
    //根据i会员id进行查询
    public void SearchMemberById() {
        //获取会话工厂
        SqlSessionFactory factory = mybatisUtil.getFactory();
        //同同一个sqlsessionfactory中获取两个sqlsession
        SqlSession sqlSession1 = factory.openSession();
        SqlSession sqlSession2 = factory.openSession();
        //查看两个sqlsession是不是同一个
        System.out.println(sqlSession1==sqlSession2);

        //通过第一个sqlsession进行查询操作
        MemberDao m1 = sqlSession1.getMapper(MemberDao.class);
        List<Member> m = m1.SearchMemberById(1);
        sqlSession1.commit();
        for (Member n:m
             ) {
            System.out.println(m);
        }
        //通过第二个sqlsession进行查询操作
        MemberDao m2 = sqlSession1.getMapper(MemberDao.class);
        List<Member> mm2 = m2.SearchMemberById(1);
        for (Member n:mm2
                ) {
            System.out.println(m);
        }


    }

 
}

 测试结果:

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

暇光曙墨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值