Mybatis缓存

Mybatis缓存

1.缓存的概念

  1. 什么是缓存

    存在于内存中的临时数据。

  2. 为什么使用缓存

    减少和数据库的交互次数,提高执行效率

  3. 适用情况:

    经常查询且不经常改变

    数据正确与否对最终结果影响不大的

    不适用情况:

    经常改变的数据

    数据的正确与否对最终结果影响很大的

    如:商品库存、银行汇率、股市牌价

二、一级缓存

概念:

​ 存在于Mybatis中SqlSession对象中的缓存

​ 执行查询后,查询结果会同时存入到SqlSession提供的一块区域中

​ 该区域结构是一个map。每次查询时先取sqlsession是否存在查询的缓存,如果有直接拿出来用。

​ 一级缓存的生命周期伴随创建的session对象,创建而存在,消失而消失。

​ 当调用SqlSession的修改、添加、删除,commit()、close()等方法时就会清空缓存

部分验证代码:

@Test
public void testCache(){
    User user1 = new userDao.findById(1);
	System.out.println(user1);//查看查询结果
    
    user1.setId(2);
    userDao.updateUser(user1);//更改数据
    
	sqlSession.clearCache();//清除缓存
    //sqlSession.close();//关闭Session
    
    System.out.println(user1);//查看处理缓存后的结果
    
}

在这里插入图片描述

三、二级缓存

概念:

​ 它是Mybatis中SqlSessionFactory对象的缓存。由同一个SqlSessionFactory对象创建的SqlSession共享其缓存

​ 它存的是散装数据,不是对象。

​ 如: {”id“:“1”,“username”:“lili”}
在这里插入图片描述

使用步骤:

  1. 让Mybatis框架支持二级缓存(SqlMapConfig.xml中设置)
  2. 让当前映射文件支持二级缓存(IUserDao.xml中配置)
  3. 让当前操作支持二级缓存(在select标签中配置)

部分代码:

SqlMapConfig.xml

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

IUserDao.xml

<cache/>

<select id="findById" parameter="int" resultType="user" useCache="true">
	select * from user where id=#{id}
</select>

测试代码

@Test
public void testSecondLevelCache(){
    SeqSession sqlSession1 = factory.openSession();
    IUserDao dao1 = sqlSession1.getMapper(IUserDao.class);
    
    User user1 = dao1.findById(1);
    System.out.println(user1);
    
    sqlSession.close();//一级缓存消失
    
    SeqSession sqlSession2 = factory.openSession();
    IUserDao dao2 = sqlSession2.getMapper(IUserDao.class);
    
    User user2 = dao1.findById(2);
    System.out.println(user2);
    sqlSession.close();//一级缓存消失
    
    System.out.println(user1==user2);   
}

在这里插入图片描述

其结果可观察到没有发起两次查询,但是返回值为false,说明不是相同对象,验证二级缓存

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值