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的整体架构

mybatis的整体架构分为三层: 1.基础支持层 该层包括:数据源模块、事务管理模块、缓存模块、Binding模块、反射模块、类型转换模块、日志模块、资源加载模块、解析器模块 2.核心处理层 该层包括:配置解析、参数映射、SQL解析、SQL执行、结果集映射、插件 3.接口层 该层包括:SqlSession 基础支持层 该层保护mybatis的基础模块,它们为核心处理层提供了良好的支撑。

百度/小米/滴滴/京东,中台架构比较

小米中台建设实践 01 小米的三大中台建设:业务+数据+技术 业务中台--从业务说起 在中台建设中,需要规范化的服务接口、一致整合化的数据、容器化的技术组件以及弹性的基础设施。并结合业务情况,判定是否真的需要中台。 小米参考了业界优秀的案例包括移动中台、数据中台、业务中台、技术中台等,再结合其业务发展历程及业务现状,整理了中台架构的核心方法论,一是企业如何共享服务,二是如何为业务提供便利。

缓存雪崩问题

缓存雪崩是缓存中大量key失效后当高并发到来时导致大量请求到数据库,瞬间耗尽数据库资源,导致数据库无法使用。 解决方案: 1、使用锁进行控制 2、对同一类型信息的key设置不同的过期时间 3、缓存预热 1. 什么是缓存雪崩 缓存雪崩是指在短时间内,大量缓存数据同时失效,导致所有请求直接涌向数据库,瞬间增加数据库的负载压力,可能导致数据库性能下降甚至崩溃。这种情况往往发生在缓存中大量 k

系统架构设计师: 信息安全技术

简简单单 Online zuozuo: 简简单单 Online zuozuo 简简单单 Online zuozuo 简简单单 Online zuozuo 简简单单 Online zuozuo :本心、输入输出、结果 简简单单 Online zuozuo : 文章目录 系统架构设计师: 信息安全技术前言信息安全的基本要素:信息安全的范围:安全措施的目标:访问控制技术要素:访问控制包括:等保

Spring+MyBatis+jeasyui 功能树列表

java代码@EnablePaging@RequestMapping(value = "/queryFunctionList.html")@ResponseBodypublic Map<String, Object> queryFunctionList() {String parentId = "";List<FunctionDisplay> tables = query(parent

Mybatis中的like查询

<if test="templateName != null and templateName != ''">AND template_name LIKE CONCAT('%',#{templateName,jdbcType=VARCHAR},'%')</if>

JavaWeb【day09】--(Mybatis)

1. Mybatis基础操作 学习完mybatis入门后,我们继续学习mybatis基础操作。 1.1 需求 需求说明: 根据资料中提供的《tlias智能学习辅助系统》页面原型及需求,完成员工管理的需求开发。 通过分析以上的页面原型和需求,我们确定了功能列表: 查询 根据主键ID查询 条件查询 新增 更新 删除 根据主键ID删除 根据主键ID批量删除

利用命令模式构建高效的手游后端架构

在现代手游开发中,后端架构的设计对于支持高并发、快速迭代和复杂游戏逻辑至关重要。命令模式作为一种行为设计模式,可以有效地解耦请求的发起者与接收者,提升系统的可维护性和扩展性。本文将深入探讨如何利用命令模式构建一个强大且灵活的手游后端架构。 1. 命令模式的概念与优势 命令模式通过将请求封装为对象,使得请求的发起者和接收者之间的耦合度降低。这种模式的主要优势包括: 解耦请求发起者与处理者

MyBatis 切换不同的类型数据库方案

下属案例例当前结合SpringBoot 配置进行讲解。 背景: 实现一个工程里面在部署阶段支持切换不同类型数据库支持。 方案一 数据源配置 关键代码(是什么数据库,该怎么配就怎么配) spring:datasource:name: test# 使用druid数据源type: com.alibaba.druid.pool.DruidDataSource# @需要修改 数据库连接及驱动u

Redis中使用布隆过滤器解决缓存穿透问题

一、缓存穿透(失效)问题 缓存穿透是指查询一个一定不存在的数据,由于缓存中没有命中,会去数据库中查询,而数据库中也没有该数据,并且每次查询都不会命中缓存,从而每次请求都直接打到了数据库上,这会给数据库带来巨大压力。 二、布隆过滤器原理 布隆过滤器(Bloom Filter)是一种空间效率很高的随机数据结构,它利用多个不同的哈希函数将一个元素映射到一个位数组中的多个位置,并将这些位置的值置