03==缓存

同一个sqlsession对象调用同一个标签,第一次访问数据库,把sql结果缓存到sqlsession缓存区中,之后在访问都是访问缓存区

当两次执行sql标签 日志中只会显示一次访问数据库操作 访问缓存的都不会被记录可以看到下面的控制台只有一次记录
在这里插入图片描述
先去内存的缓存区看有没有要查的,没有就去数据库,再把结果缓存
不同的SQL session对象是有不用的缓存空间的 没法交互的访问
即使是访问同一个标签,不同的SQLSession控制台会有两条记录
session1和Session不同对象 统一标签

  • 以上讨论的是在一个servlet下
    1.同一SQL session调用相同标签 可以缓存
    2.不同sqlsession即使调用相同标签 也无法共享缓存

  • 现在问题升级—》不再同一次servlet下了

  • 访问一次servlet创建一个SqlSession 如果访问两遍Servlet 又new了个新的SQL session 那刚才的缓存就没了

  • 有没有什么级别是贯穿整个程序 访问几遍servlet都没变得呢?

  • factory
    在这里插入图片描述
    二级缓存(factory的缓存)开启,缓存范围是factory了
    在当前的namespace命名空间下所有的查询都放在二级缓存里面
    readOnly=ture允许访问
    在这里插入图片描述
    开启之后前面的不同的SQL session对象即使操作统一标签也会又两条记录现在就只有一个记录了
    在这里插入图片描述

二级缓存和每个sqlseesion的缓存是独立的

在这里插入图片描述
每个sqlsession(上面的两个小圈圈)对应着一个自己的sqlseesion缓存( 下面的两个小圈圈) 当sqlsession提交了结束了之后才会把缓存复制到二级缓存factory当中

  • 把第一个SQLsession的close()注释掉 二级缓存区就没有记录 第二次再访问的时候就访问数据库 因为缓存没有
  • 在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值