• 一级缓存(默认开始sqlsession级别)和 二级缓存(testTwoCache)


    一级缓存(默认开始sqlsession级别)


    一级缓存失效的四种情况:
    1.不同的sqlsession对应不同的缓存
    2.同一个sqlsession但是查询条件不同
    3.同一个sqlsession两次查询期间执行了任何一个增删改的操作(testgetEmpByEid3)
    4.同一个sqlsession两次查询期间手动清空了缓存

    1. @Test
    2. public void getEmpByEmpIdTest(){
    3. SqlSession sqlSession1 = SqlSessionUtil.getSqlSession();
    4. CacheMapper mapper1 = sqlSession1.getMapper(CacheMapper.class);
    5. //此处用的是同一个Sqlsession
    6. Emp emp1 = mapper1.getEmpByEmpId(1);//第一条emp1
    7. System.out.println(emp1);
    8. Emp emp2 = mapper1.getEmpByEmpId(1);//第二条emp2
    9. System.out.println(emp2);
    10. }

    一级缓存失效情况

    1. @Test
    2. public void testgetEmpByEid2(){
    3. SqlSession sqlsession1 = SQLsession.getSqlsession();
    4. CacheMapper mapper1 = sqlsession1.getMapper(CacheMapper.class);
    5. Emp empByEid1 = mapper1.getEmpByEid(1);
    6. System.out.println(empByEid1);
    7. SqlSession sqlsession2 = SQLsession.getSqlsession();
    8. CacheMapper mapper2 = sqlsession2.getMapper(CacheMapper.class);
    9. Emp empByEid2 = mapper2.getEmpByEid(1);
    10. System.out.println(empByEid2);
    11. }
    1. @Test
    2. public void testgetEmpByEid3(){
    3. SqlSession sqlsession = SQLsession.getSqlsession();
    4. CacheMapper mapper = sqlsession.getMapper(CacheMapper.class);
    5. Emp empByEid1 = mapper.getEmpByEid(1);
    6. System.out.println(empByEid1);
    7. mapper.insertEmp(new Emp(null,"sdd",12,"1","1",null));
    8. Emp empByEid2 = mapper.getEmpByEid(1);
    9. System.out.println(empByEid2);
    10. }
    1. @Test
    2. public void testTwoCache(){
    3. //不能使用工具类的形式创建SQLsession
    4. try {
    5. InputStream in = Resources.getResourceAsStream("mybatis-config.xml");
    6. SqlSessionFactory builder = new SqlSessionFactoryBuilder().build(in);
    7. SqlSession sqlSession1 = builder.openSession(true);
    8. CacheMapper mapper1 = sqlSession1.getMapper(CacheMapper.class);
    9. System.out.println(mapper1.getEmpByEid(1));
    10. sqlSession1.close();
    11. SqlSession sqlSession2 = builder.openSession(true);
    12. CacheMapper mapper2 = sqlSession2.getMapper(CacheMapper.class);
    13. System.out.println(mapper2.getEmpByEid(1));
    14. sqlSession2.close();
    15. } catch (IOException e) {
    16. e.printStackTrace();
    17. }
    18. }

    二级缓存(testTwoCache)


    1.在核心配置文件中设置全局配置属性cacheEnabled="ture",默认为ture不需要设置
    2.在映射文件中配置标签
    3.二级缓存必须在sqlSession关闭或提交后有效
    4.查询的数据所转换的实体类类型必须实现序列化的接口(implements Serializable )
    二级缓存失效的情况:
    两次查询中间执行了任意的增删改查,会使一级缓存和二级缓存同时失效

  • 相关阅读:
    电影数据读取、分析与展示(Python+Scrapy)
    阿里藏经阁天花板:高性能 Java 架构核心原理手册,一定要偷偷看
    2023.11.9 IDEA 配置 Lombok
    NICE-SLAM——论文简析
    RocketMQ并行消费浅析
    MySQL docker compose安装配置
    SpringBoot 整合 Minio 实现 文件上传
    在windows10下VSCode进行shell开发
    【java】【SpringBoot】【三】开发实用篇 基于SpringBoot整合任意第三方技术
    无法加载文件 C:\Users\haoqi\Documents\WindowsPowerShell\profile.ps1,因为在此系统上禁止运行脚本
  • 原文地址:https://blog.csdn.net/m0_61916154/article/details/127108859