缓存

缓存

声明:本文章属于学习笔记,根据狂神说的Mybatis编写

Mybatis在线文档:https://mybatis.org/mybatis-3/zh/index.html

一丶缓存介绍

我们都挺说过缓存,但是什么是缓存呢?
其实这个事情很好理解,我几个简单的例子:
假如我们在数据库中的查询一些数据,我们会使用sql语句,这时一次的查询结果就会就将他暂存到一个可以直接取到的地方。当我们查询的时候我们就会奔着缓存去,而不是去再次连接数据库。

在这里插入图片描述

2丶一级缓存

首先我们要看这样的一段代码:
接口:
在这里插入图片描述

UserMapper.xml文件:

<mapper namespace="com.kdy.dao.UserMapper">
    <select id="queryById" resultType="com.kdy.pojo.User" parameterType="int">
        select *
        from  user  where id=#{id};
    </select>
</mapper>

测试类测试:

    @Test
    public void test(){
        SqlSession sqlSession = MybatisUtils.getSqlSession();
        UserMapper mapper = sqlSession.getMapper(UserMapper.class);
        User user1 = mapper.queryById(1);
        System.out.println(user1);

        System.out.println("==========");
        User user2 = mapper.queryById(1);
        System.out.println(user2);

        System.out.println(user1==user2);
    }

运行结果:
在这里插入图片描述

我们可以看到返回值为true,为什么返回的是true?因为我们的数据库连接还有一次,当我们再次查询的时候缓存还存在。这两个sql的地址引用是一个。

我们在中间加上更新的语句:
在这里插入图片描述
运行结果:
在这里插入图片描述

所以说当我们刷新的时候,缓存就是失效的。

在这里插入图片描述

二丶二级缓存

在这里插入图片描述
首先我们要配置UserMapper.XML文件:
在这里插入图片描述

我们先看着这样的一组测试:在这里插入图片描述

当我们没有关闭资源的时候,我们可以看到:
在这里插入图片描述

很明显这是走了两次数据库,因为他并没有关闭资源,并没有满足二级缓存机制。

当我们查询完就关闭的时候:
在这里插入图片描述

运行结果:
在这里插入图片描述

很明显是一次数据库连接,对象只有一个,这也恰恰说明当我们创建数据库连接的时候,就开始了一级缓存,但是当我们关闭当前会话的资源后,就会将一级缓存给 < cache > ,所以还是一次数据库的连接。

三丶Mybatis缓存的原理:

在这里插入图片描述

其实就是一句话的原理:先看二级缓存中有没有,有就返回,没有就找一级缓存,再看一级缓存,有就返回,没有就找数据库。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值