Hibernate基本特性二 -- 一级缓存

2024-06-14 01:08

本文主要是介绍Hibernate基本特性二 -- 一级缓存,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Hibernate基本特性之一级缓存机制


    一级缓存被称为Session级别的缓存。(默认启用)

    每个Session都有自己独立的缓存区,该缓存区随着Session创建而开辟,随着Session.close()而释放。

    该缓存区可以存储当前Session关联的对象(持久对象)。



    一级缓存的好处:

        Hibernate在查询时,先去缓存查找,如果缓存没有才去DB查询。如果利用Session对同一个对象查询多次,第一次去DB,后续会从缓存中获取,从而减少与DB的交互次数。



    管理一级缓存的方法:

        session.evict(obj);//将obj清除

        session.clear();//清除所有对象

        session.close();//清除所有对象并关闭与数据库的连接


示例代码:

package test;import org.hibernate.Session;
import org.hibernate.Transaction;
import org.junit.Test;import util.HibernateUtil;
import entity.Foo;/*** 测试Hibernate一级缓存**/
public class TestCache {//@Testpublic void test1(){Session session = HibernateUtil.openSession();Foo foo = (Foo) session.load(Foo.class,1);System.out.println("foo:"+foo.getName());//此次没有触发查询,而是从缓存中查找Foo foo2 = (Foo) session.load(Foo.class,1);System.out.println("foo2:"+foo2.getSalary());session.close();}@Testpublic void test2(){Session session = HibernateUtil.openSession();Foo foo = (Foo) session.load(Foo.class,1);System.out.println("foo:"+foo.getName());//session.evict(foo);//将foo从缓存中清除session.clear();//清除所有缓存//还会从数据库中查询Foo foo2 = (Foo) session.load(Foo.class,1);System.out.println("foo2:"+foo2.getSalary());session.close();}
}
test1的运行结果截图:



这篇关于Hibernate基本特性二 -- 一级缓存的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Redis 基本数据类型和使用详解

《Redis基本数据类型和使用详解》String是Redis最基本的数据类型,一个键对应一个值,它的功能十分强大,可以存储字符串、整数、浮点数等多种数据格式,本文给大家介绍Redis基本数据类型和... 目录一、Redis 入门介绍二、Redis 的五大基本数据类型2.1 String 类型2.2 Hash

MyBatis延迟加载与多级缓存全解析

《MyBatis延迟加载与多级缓存全解析》文章介绍MyBatis的延迟加载与多级缓存机制,延迟加载按需加载关联数据提升性能,一级缓存会话级默认开启,二级缓存工厂级支持跨会话共享,增删改操作会清空对应缓... 目录MyBATis延迟加载策略一对多示例一对多示例MyBatis框架的缓存一级缓存二级缓存MyBat

前端缓存策略的自解方案全解析

《前端缓存策略的自解方案全解析》缓存从来都是前端的一个痛点,很多前端搞不清楚缓存到底是何物,:本文主要介绍前端缓存的自解方案,文中通过代码介绍的非常详细,需要的朋友可以参考下... 目录一、为什么“清缓存”成了技术圈的梗二、先给缓存“把个脉”:浏览器到底缓存了谁?三、设计思路:把“发版”做成“自愈”四、代码

Java Instrumentation从概念到基本用法详解

《JavaInstrumentation从概念到基本用法详解》JavaInstrumentation是java.lang.instrument包提供的API,允许开发者在类被JVM加载时对其进行修改... 目录一、什么是 Java Instrumentation主要用途二、核心概念1. Java Agent

Java 缓存框架 Caffeine 应用场景解析

《Java缓存框架Caffeine应用场景解析》文章介绍Caffeine作为高性能Java本地缓存框架,基于W-TinyLFU算法,支持异步加载、灵活过期策略、内存安全机制及统计监控,重点解析其... 目录一、Caffeine 简介1. 框架概述1.1 Caffeine的核心优势二、Caffeine 基础2

Redis高性能Key-Value存储与缓存利器常见解决方案

《Redis高性能Key-Value存储与缓存利器常见解决方案》Redis是高性能内存Key-Value存储系统,支持丰富数据类型与持久化方案(RDB/AOF),本文给大家介绍Redis高性能Key-... 目录Redis:高性能Key-Value存储与缓存利器什么是Redis?为什么选择Redis?Red

Kotlin 协程之Channel的概念和基本使用详解

《Kotlin协程之Channel的概念和基本使用详解》文章介绍协程在复杂场景中使用Channel进行数据传递与控制,涵盖创建参数、缓冲策略、操作方式及异常处理,适用于持续数据流、多协程协作等,需注... 目录前言launch / async 适合的场景Channel 的概念和基本使用概念Channel 的

Python函数的基本用法、返回值特性、全局变量修改及异常处理技巧

《Python函数的基本用法、返回值特性、全局变量修改及异常处理技巧》本文将通过实际代码示例,深入讲解Python函数的基本用法、返回值特性、全局变量修改以及异常处理技巧,感兴趣的朋友跟随小编一起看看... 目录一、python函数定义与调用1.1 基本函数定义1.2 函数调用二、函数返回值详解2.1 有返

React 记忆缓存的三种方法实现

《React记忆缓存的三种方法实现》本文主要介绍了React记忆缓存的三种方法实现,包含React.memo、useMemo、useCallback,用于避免不必要的组件重渲染和计算,感兴趣的可以... 目录1. React.memo2. useMemo3. useCallback使用场景与注意事项在 Re

Docker多阶段镜像构建与缓存利用性能优化实践指南

《Docker多阶段镜像构建与缓存利用性能优化实践指南》这篇文章将从原理层面深入解析Docker多阶段构建与缓存机制,结合实际项目示例,说明如何有效利用构建缓存,组织镜像层次,最大化提升构建速度并减少... 目录一、技术背景与应用场景二、核心原理深入分析三、关键 dockerfile 解读3.1 Docke