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相同,手动清除一级缓存
相关推荐
麦兜*2 小时前
Spring Boot集成方案 + Elasticsearch向量检索,语义搜索核弹
java·spring boot·python·spring·elasticsearch·spring cloud·系统架构
yh云想4 小时前
《RedisTemplate 核心操作全解析》
redis·spring·redistemplate
vision_wei_4 小时前
Redis中间件(二):Redis协议与异步方式
网络·数据库·c++·redis·分布式·缓存·中间件
一枚小小程序员哈4 小时前
基于springboot的宠物商城设计与实现
java·spring boot·spring·eclipse·tomcat·maven·宠物
代码的余温4 小时前
Redis内存耗尽时的应对策略
数据库·redis·缓存
Asu52024 小时前
思途AOP学习笔记 0806
java·sql·学习·mybatis
期待のcode7 小时前
配置Mybatis环境
java·tomcat·mybatis
代码的余温9 小时前
Redis集群核心原理与实战解析
数据库·redis·缓存
一个儒雅随和的男子9 小时前
Spring Security 框架深度集成与开发指南
java·后端·spring
写代码的比利9 小时前
Spring 调试终于不再痛苦了
spring boot·spring·intellij idea