MyBatis一级缓存和二级缓存以及 mybatis架构

2024-08-28 08:52

本文主要是介绍MyBatis一级缓存和二级缓存以及 mybatis架构,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

缓存

数据缓存,让数据离我们执行的程序更近一点,让程序能够快速的获取到数据

缓存的作用就是减轻数据库的压力,提高查询性能。缓存实现的原理是从数据库中查询出来的对象在使用完后不要销毁,而是存储在内内(缓存)中,当再次需要获取该对象时,直接从缓存中直接获取,不再向数据库只是select语句,从而减少数据库的查询压力

mybatis一级缓存

一级缓存默认是SqlSession级别的,在每一个SqlSession中查询到的数据先缓存在SqlSession对象中,第二次查询时,先从缓存中查询,如果有直接返回,没有则查询数据库

必须是同一个SqlSession查询,SqlSession没有关闭的状态下

@Testpublic void test5() {//一级缓存测试SqlSession sqlSession = MybatisUtil.getSqlSession();TeacherDao teacherDao = sqlSession.getMapper(TeacherDao.class);Teacher teacher1=teacherDao.findTeacherById(4);System.out.println(teacher1);Teacher teacher2=teacherDao.findTeacherById(4);System.out.println(teacher2);sqlSession.commit();sqlSession.close();}

一级缓存流程

一级缓存生命周期:

开始于 SqlSession的创建

如果期间执行了新增、修改、删除也会清空SqlSession对象中的缓存数据,防止脏读数据

调用sqlSession.clearCache()强制清空缓存数据

结束于SqlSession的关闭,

二级缓存

二级缓存是SqlsessionFactory级别,可以让多个SqlSession共享数据  mybatis默认没有开启二级缓存,使用时需要在mybatis配置文件中配置开启,二级缓存是 SqlSessionFactory 级别的,根据 mapper 的 namespace 划分 区域的,相同 namespace 的 mapper 查询的数据缓存在同一个区域,如果使 用 mapper 代理方法每个 mapper 的 namespace 都不同,此时可以理解为二 级缓存区域是根据 mapper 划分。

如果开启了二级缓存,当SqlSession关闭时,会将一级缓存中的数据存储到二级缓存中(也就是SqlsessionFactory中), 当其他的SqlSession就可以二级缓存中查询到之前SqlSession查询的数据。

每次查询会先从缓存区域查找,如果找不到则从数据库查询,并将查询到数 据写入缓存。Mybatis 内部存储缓存使用一个 HashMap,key 为 hashCode+sqlId+Sql 语句。value 为从查询出来映射生成的 java 对象

开启二级缓存三个配置

1、在mybatis.xml配置 <setting name="cacheEnabled" value="true"/> false则关闭二级缓存。

 2、对象序列化,将所有的 POJO 类实现序列化接口 Java.io. Serializable。

 3、配置映射文件,在 Mapper 映射文件中添加<cache />,表示此 mapper 开启二级缓存 * select标签useCache="true"使用二级缓存,false关闭二级缓存。

 

如果期间执行了新增、修改、删除也会清空SqlSession对象中的缓存数据,防止脏读数据

 mybatis架构

 

这篇关于MyBatis一级缓存和二级缓存以及 mybatis架构的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1114304

相关文章

在MyBatis的XML映射文件中<trim>元素所有场景下的完整使用示例代码

《在MyBatis的XML映射文件中<trim>元素所有场景下的完整使用示例代码》在MyBatis的XML映射文件中,trim元素用于动态添加SQL语句的一部分,处理前缀、后缀及多余的逗号或连接符,示... 在MyBATis的XML映射文件中,<trim>元素用于动态地添加SQL语句的一部分,例如SET或W

Mybatis官方生成器的使用方式

《Mybatis官方生成器的使用方式》本文详细介绍了MyBatisGenerator(MBG)的使用方法,通过实际代码示例展示了如何配置Maven插件来自动化生成MyBatis项目所需的实体类、Map... 目录1. MyBATis Generator 简介2. MyBatis Generator 的功能3

Redis缓存问题与缓存更新机制详解

《Redis缓存问题与缓存更新机制详解》本文主要介绍了缓存问题及其解决方案,包括缓存穿透、缓存击穿、缓存雪崩等问题的成因以及相应的预防和解决方法,同时,还详细探讨了缓存更新机制,包括不同情况下的缓存更... 目录一、缓存问题1.1 缓存穿透1.1.1 问题来源1.1.2 解决方案1.2 缓存击穿1.2.1

Mybatis提示Tag name expected的问题及解决

《Mybatis提示Tagnameexpected的问题及解决》MyBatis是一个开源的Java持久层框架,用于将Java对象与数据库表进行映射,它提供了一种简单、灵活的方式来访问数据库,同时也... 目录概念说明MyBATis特点发现问题解决问题第一种方式第二种方式问题总结概念说明MyBatis(原名

SpringBoot基于MyBatis-Plus实现Lambda Query查询的示例代码

《SpringBoot基于MyBatis-Plus实现LambdaQuery查询的示例代码》MyBatis-Plus是MyBatis的增强工具,简化了数据库操作,并提高了开发效率,它提供了多种查询方... 目录引言基础环境配置依赖配置(Maven)application.yml 配置表结构设计demo_st

Redis与缓存解读

《Redis与缓存解读》文章介绍了Redis作为缓存层的优势和缺点,并分析了六种缓存更新策略,包括超时剔除、先删缓存再更新数据库、旁路缓存、先更新数据库再删缓存、先更新数据库再更新缓存、读写穿透和异步... 目录缓存缓存优缺点缓存更新策略超时剔除先删缓存再更新数据库旁路缓存(先更新数据库,再删缓存)先更新数

el-select下拉选择缓存的实现

《el-select下拉选择缓存的实现》本文主要介绍了在使用el-select实现下拉选择缓存时遇到的问题及解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录项目场景:问题描述解决方案:项目场景:从左侧列表中选取字段填入右侧下拉多选框,用户可以对右侧

解决mybatis-plus-boot-starter与mybatis-spring-boot-starter的错误问题

《解决mybatis-plus-boot-starter与mybatis-spring-boot-starter的错误问题》本文主要讲述了在使用MyBatis和MyBatis-Plus时遇到的绑定异常... 目录myBATis-plus-boot-starpythonter与mybatis-spring-b

SpringBoot使用注解集成Redis缓存的示例代码

《SpringBoot使用注解集成Redis缓存的示例代码》:本文主要介绍在SpringBoot中使用注解集成Redis缓存的步骤,包括添加依赖、创建相关配置类、需要缓存数据的类(Tes... 目录一、创建 Caching 配置类二、创建需要缓存数据的类三、测试方法Spring Boot 熟悉后,集成一个外

Spring Boot 中整合 MyBatis-Plus详细步骤(最新推荐)

《SpringBoot中整合MyBatis-Plus详细步骤(最新推荐)》本文详细介绍了如何在SpringBoot项目中整合MyBatis-Plus,包括整合步骤、基本CRUD操作、分页查询、批... 目录一、整合步骤1. 创建 Spring Boot 项目2. 配置项目依赖3. 配置数据源4. 创建实体类