一级缓存

一级缓存是Mybatis内置的缓存机制,存储在SqlSession内部,自动开启并缓存相同SQL与参数的结果集,减少对数据库的重复查询。当发生增删改操作时,缓存会被自动清空。一级缓存与二级缓存的主要区别在于作用范围和开启方式。测试结果显示,一级缓存能有效提升查询效率,但在特定操作后会失效。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一级缓存

一级缓存是mybatis自带的缓存,mybatis每次在查询后,会将语句和参数相同的查询SQL的结果集存放进缓存,待下一次有相同的语句和参数时,mybatis直接将缓存内的结果集返回,而不再查询数据库。如果对于缓存的数据对应的表有增删改操作的话,缓存自动清空。

一级缓存和二级缓存的区别:
1.一级缓存在于一个SqlSession之内,二级缓存在于不同的SqlSession之间
2. 一级缓存不需要手动开启,属于默认开启状态;二级缓存需要手动开启

相同点:
1.在增删改SQL之后,缓存会自动清空
2. flushCache="true"的查询语句查询内容不存放进缓存

失效策略:当执行SQL时候两次查询中间发生了增删改的操作,即insert、update、delete等操作commit后会清空该SQLSession缓存; 比如sqlsession关闭,或者清空等

测试代码:

 @Test
    public void testSqlsession(){
        if(sqlSession!=null){
        User user=userMapper.selectByid(20184144);
        //查询数据库
        System.out.println("第一次查询"+user.toString());
        //同一个session中,执行相同语句,且参数不变,mybatis默认首先从一级缓存中查找,而不是先从数据库中去查找,如果没有,则查询数据库
        System.out.println("第二次查询"+user.toString());
        //执行同一个session下的相同的sql的语句,但参数值不一样,然后再次去查找数据库
        User user1=userMapper.selectByid(33);
        System.out.println("第san次查询"+user1.toString());
        }
    }

测试结果;
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值