Mybatis【面试题】讲讲Mybatis的缓存-简答

参考资料:Mybatis 官网

本文内容如下:

一、简答

  • 一级缓存
  • 二级缓存
  • spring 整合 Mybatis 后的缓存
  • 总结

二、代码验证缓存

  • 1、验证一级缓存的存在
    • 验证作用范围 STATEMENT
    • 验证作用范围 SESSION
  • 2、验证二级缓存的存在
  • 3、Spring整合Mybatis 之后,一级缓存的验证

一、简答

Mybatis 的缓存有 一级缓存二级缓存

一级缓存

一级缓存在 Mybatis 中默认是开启并生效的。

一级缓存存在两种作用范围:

  • SESSION(默认)
    在同一个 SqlSession 中多次执行同一个查询,除第一次走数据库,剩下的都走缓存
  • STATEMENT
    每执行完一个 Mapper 中的语句后都会将一级缓存清除。

二级缓存

二级缓存在 Mybatis 中默认是不开启。准确的来讲应该是二级缓存的全局配置开关是默认开启的但是想要二级缓存生效,还需要进行配置。

二级缓存的作用范围是同一个 namespace 下的mapper 映射文件内容。多个 SqlSession 之间可以共享缓存内容。

spring 整合 Mybatis 后

Spring 整合 Mybatis 之后,二级缓存照常生效,但是一级缓存有了改变。如果不是在同一个事务中每一次 Mapper 方法的调用,都会生成一个新的 Sqlsession,这时候一级缓存就不会命中。

总结

默认情况下,相关信息如下:

作用域 默认是否开启
一级缓存 SESSION(默认) 和 STATEMENT 开启
二级缓存 同一个namespace下的mapper映射文件内容 关闭

二、代码实践

验证一级缓存的存在

验证作用范围 STATEMENT

当 一级缓存 的作用域改为 STATEMENT 时,每执行一次 Mapper 中的语句后会将一级缓存清除。

此时一级缓存相当于摆设。

step1、设置一级缓存作用范围为 STATEMENT(mybatis-config.xml中)

<settings>
	<!-- 调整一级缓存作用域为 STATEMENT -->
	<setting name="localCacheScope" value="STATEMENT"/>
</settings>

step2、相关代码

/**
 * <p> Mybatis 缓存验证测试 </p>
 *
 * @Author WTF名字好难取
 */
public class DemoTestFromXML {
   
    public static SqlSession getSqlSession() throws FileNotFoundException {
   
        //配置文件
        InputStream configFile = new FileInputStream("xxx.mybatis-config.xml");
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(configFile);
        //加载配置文件得到SqlSessionFactory
        return sqlSessionFactory.openSession();
    }

    public static void main(String[] args) throws Exception {
   
        // 一级缓存:STATMENT 验证
        oneLeveCacheVerifySTATEMENT();
    }

    /**
     * <p> 一级缓存:STATMENT验证 </p>
     *
     * @throws Exception
     */
    public static void oneLeveCacheVerifySTATEMENT() throws Exception{
   
        UserInfoMapper mapper = getSqlSession().getMapper(UserInfoMapper.class);
        // 第一次查询
        List<UserInfo> userInfos1 = mapper.selectList()
  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值