MyBatis缓存机制

简介: MyBatis提供两级缓存机制:一级缓存(Local Cache)默认开启,作用范围为SqlSession,重复查询时直接从缓存读取;二级缓存(Second Level Cache)需手动开启,作用于Mapper级别,支持跨SqlSession共享数据,减少数据库访问,提升性能。

MyBatis 提供了两级缓存(Local Cache 和 Second Level Cache)来满足不同的需求。
1、Local Cache(本地缓存、一级缓存):
● Local Cache 是指在 SqlSession 范围内的缓存,它默认开启并且无法关闭。
● 在同一个 SqlSession 中,当执行相同的查询语句(包括参数相同)时,如果之前已经查询过相同的结果,那么会直接从本地缓存中获取数据,而不会再发送 SQL 查询到数据库。
● Local Cache 是基于 HashMap 实现的,它仅在当前 SqlSession 中有效,并且对于不同的 SqlSession 是隔离的。
2、Second Level Cache(二级缓存):
● Second Level Cache 是指在 Mapper 范围内的缓存,它可以跨 SqlSession 共享数据。
● 如果开发者需要使用 Second Level Cache,需要在映射文件中进行配置。
● 当开启了 Second Level Cache 后,同一个 namespace 下的查询结果会被缓存起来,其他 SqlSession 也可以共享这部分数据,从而减少数据库查询次数。
● Second Level Cache 默认是关闭的,需要手动在映射文件中配置开启。

目录
相关文章
|
12小时前
|
安全 Java 开发者
Spring容器中的bean是线程安全的吗?
Spring容器中的bean默认为单例模式,多线程环境下若操作共享成员变量,易引发线程安全问题。Spring未对单例bean做线程安全处理,需开发者自行解决。通常,Spring bean(如Controller、Service、Dao)无状态变化,故多为线程安全。若涉及线程安全问题,可通过编码或设置bean作用域为prototype解决。
5 1
|
12小时前
|
存储 关系型数据库 MySQL
为什么MySQL索引结构是B+tree ?
在MySQL中,为了提高检索效率和稳定性,采用了B+树作为索引的数据结构。相比二叉树或B树,B+树的非叶子节点仅存储key和指针,使得每页能容纳更多key,树的层级更浅,检索更快;所有数据集中在叶子节点,形成双向链表,利于区间查询。以16KB页为例,三层B+树可容纳约2190万条数据。
8 1
|
12小时前
|
存储 安全
Cookie会话跟踪的原理
会话跟踪技术包括Cookie和Session。Cookie是客户端技术,首次访问时服务器通过Set-Cookie响应头发送Cookie,浏览器保存并在后续请求中通过Cookie请求头回传,实现会话跟踪。但Cookie易被用户修改或禁用,安全性较低。Session则是服务器端技术,每次会话生成唯一的Session ID,通过Cookie传递给客户端,客户端在后续请求中携带此ID,服务器据此识别会话。Session更安全,但在集群环境中需解决会话共享问题。
4 1
|
12小时前
|
SQL 算法 数据库
SQL优化方面的经验
在项目中优化SQL查询执行效率,主要从表设计、索引创建与使用三个维度考虑。表设计包括合理选择数据类型、主键设计等;索引创建关注大表、常用查询条件字段,区分度高的列优先建索引;使用时避免索引失效,利用explain检查执行计划。高级优化可采用读写分离和分库分表策略。
10 1
|
20天前
|
NoSQL Redis
Redis的数据淘汰策略有哪些 ?
Redis 提供了 8 种数据淘汰策略,分为淘汰易失数据和淘汰全库数据两大类。易失数据淘汰策略包括:volatile-lru、volatile-lfu、volatile-ttl 和 volatile-random;全库数据淘汰策略包括:allkeys-lru、allkeys-lfu 和 allkeys-random。此外,还有 no-eviction 策略,禁止驱逐数据,当内存不足时新写入操作会报错。
49 16
|
11小时前
|
XML Java 数据库连接
Mybatis映射关系
简介:本文介绍了MyBatis框架中四种常见的关系映射方式,包括一对一、一对多、多对一及多对多。一对一通过简单属性映射实现;一对多通过在主对象中添加集合属性并使用`<collection>`标签映射子对象集合;多对一则利用`<association>`标签在主对象中映射单个子对象;多对多需引入第三方类,分别在两个主对象中添加对方的集合属性,并通过`<collection>`标签实现映射。
47 32
|
11小时前
|
存储 索引
什么情况下不应该创建索引?
索引应避免在很少使用的列、数据值少的列、text/image/bit类型列上创建,因为这些情况下索引不仅无助于提升查询速度,还会降低系统维护效率,增加存储开销。当数据修改频率远高于查询时,也不宜创建索引。
37 25
|
11小时前
|
关系型数据库 数据库
数据库如何保证事务的ACID特性?
InnoDB通过undo log实现事务的原子性,支持回滚;采用悲观锁与乐观锁确保事务隔离性;利用redo log保障事务持久性,记录数据页的物理修改并用于恢复;通过上述特性共同维护数据的一致性。
38 26
|
13天前
|
弹性计算 运维 Ubuntu
|
20天前
|
Java Spring
SpringBoot自动装配的原理
在Spring Boot项目中,启动引导类通常使用`@SpringBootApplication`注解。该注解集成了`@SpringBootConfiguration`、`@ComponentScan`和`@EnableAutoConfiguration`三个注解,分别用于标记配置类、开启组件扫描和启用自动配置。
52 17