当前位置: 首页 > news >正文

Mybatis MyBatis框架的缓存 一级缓存

1. 缓存的概念

  1. 缓存的概念

    1. 在内存中临时存储数据,速度快,可以减少数据库的访问次数。
    2. 经常需要查询,不经常修改的数据,不是特别重要的数据都适合于存储到缓存中。

2.Mybatis缓存

  • mybatis包含了一个非常强大的查询缓存特性,他可以非常方便的定制和配置缓存。缓存可以极大的提高查询的效率
  • mybatis系统当中默认定义了两级缓存:一级缓存和二级缓存
    • 默认情况之下,只有一级缓存开启(sqlSession级别的缓存)
    • 二级缓存需要手动开启配置,需要局域namespace级别的缓存。

1.一级缓存(也叫本地缓存)

  1. MyBatis的一级缓存也是SqlSession的缓存。

  2. SqlSession对象中维护了一个Map集合,用于存储相互的缓存数据。

  3. 查询的时候,先从SqlSession的缓存中查找,如果有,直接返回。如果没有,查询数据库。

  4. 证明一级缓存的存在,通过用户id查询2次,查看结果。

    public class UserTest {
        private InputStream in = null;
        private SqlSession session = null;
        private UserDao mapper = null;
    
        /**
         * 测试查询所有的方法
         */
        @Test
        public void findById() throws IOException {
            //加载主配置文件,目的是为了构建SqlSessionFactory对象
            in = Resources.getResourceAsStream("SqlMapConfig.xml");
            //创建SqlSessionFactory对象
            SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(in);
            //通过SqlSessionFactory工厂对象创建SqlSesssion对象
            session = factory.openSession();
            //通过Session创建UserDao接口代理对象
            mapper = session.getMapper(UserDao.class);
    
            User user1 = mapper.findById(1);
            System.out.println(user1.toString());
            System.out.println("-----------------");
            User user2 = mapper.findById(1);
            System.out.println(user2.toString());
            System.out.println(user1 == user2);
            //释放资源
            session.close();
            in.close();
        }
    }

    缓存失效的情况:

  • sqlSession不同
  • sqlSession相同,查询条件不同
  • sqlSession相同,两次查询之间执行了增删改操作
  • sqlSession相同,手动清除一级缓存

相关文章:

  • Fino1: 关于推理增强型大型语言模型在金融领域的可迁移性
  • stable diffusion 人物高级提示词(四)朝向、画面范围、远近、焦距、机位、拍摄角度
  • 手写简易RPC(实践版)
  • 【关于电商数据采集】电商数据采集的市场应用及发展
  • golang深度学习-基础篇
  • Ubuntu 20.04源码安装opencv 4.5.0
  • 爬取网站内容转为markdown 和 html(通常模式)
  • 代码随想录-- 第一天图论 --- 岛屿的数量
  • ArcGis和Super Map
  • 接入DeepSeek后,智慧园区安全调度系统的全面提升
  • 怎样从零基础开始学习大模型
  • Vue2/Vue3自定义指令
  • 从零开始构建一个语言模型中vocab_size(词汇表大小)的设定规则
  • v4l2子系统学习(一)V4L2应用程序编程
  • Python3测试开发面试题2
  • 在echarts的tooltip组件中使用vue3自定义组件
  • Spring Bean生命周期通俗讲解
  • VScode C语言学习开发环境;运行提示“#Include错误,无法打开源文件stdio.h”
  • php文件包含
  • C extern在函数声明中的作用
  • 三大上市猪企:前瞻应对饲料原材料价格波动
  • 国家卫健委有关负责人就白皮书发布答记者问
  • 上海国际咖啡文化节开幕,北外滩集结了超350个展位
  • 原国家有色金属工业局副局长黄春萼逝世,享年86岁
  • 东风着陆场近日气象条件满足神舟十九号安全返回要求
  • 160名老人报旅行团被扔服务区?张家界官方通报