Mybatis MyBatis框架的缓存 一级缓存

1. 缓存的概念

  1. 缓存的概念

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

2.Mybatis缓存

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

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

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

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

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

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

    java 复制代码
    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相同,手动清除一级缓存
相关推荐
黄俊懿1 小时前
【深入理解SpringCloud微服务】Seata(AT模式)源码解析——开启全局事务
java·数据库·spring·spring cloud·微服务·架构·架构师
Dwzun4 小时前
基于SpringBoot+Vue的二手书籍交易平台系统【附源码+文档+部署视频+讲解)
java·vue.js·spring boot·后端·spring·计算机毕业设计
期待のcode4 小时前
Wrapper体系中的condition参数
java·spring boot·后端·mybatis
雨中飘荡的记忆5 小时前
Spring状态机深度解析
java·后端·spring
SadSunset5 小时前
(16)Bean的实例化
java·数据库·笔记·spring
力江6 小时前
FastAPI 最佳架构实践,从混乱到优雅的进化之路
python·缓存·架构·单元测试·fastapi·分页·企业
屋外雨大,惊蛰出没6 小时前
小白安装Redis
数据库·redis·缓存
雨中飘荡的记忆7 小时前
Spring事件机制:解耦利器与实战
spring
float_六七8 小时前
Spring AOP连接点实战解析
java·后端·spring
期待のcode8 小时前
MyBatis-Plus的Wrapper核心体系
java·数据库·spring boot·后端·mybatis