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

相关文章

Python ORM神器之SQLAlchemy基本使用完全指南

《PythonORM神器之SQLAlchemy基本使用完全指南》SQLAlchemy是Python主流ORM框架,通过对象化方式简化数据库操作,支持多数据库,提供引擎、会话、模型等核心组件,实现事务... 目录一、什么是SQLAlchemy?二、安装SQLAlchemy三、核心概念1. Engine(引擎)

使用Spring Cache本地缓存示例代码

《使用SpringCache本地缓存示例代码》缓存是提高应用程序性能的重要手段,通过将频繁访问的数据存储在内存中,可以减少数据库访问次数,从而加速数据读取,:本文主要介绍使用SpringCac... 目录一、Spring Cache简介核心特点:二、基础配置1. 添加依赖2. 启用缓存3. 缓存配置方案方案

Python异步编程之await与asyncio基本用法详解

《Python异步编程之await与asyncio基本用法详解》在Python中,await和asyncio是异步编程的核心工具,用于高效处理I/O密集型任务(如网络请求、文件读写、数据库操作等),接... 目录一、核心概念二、使用场景三、基本用法1. 定义协程2. 运行协程3. 并发执行多个任务四、关键

Go语言连接MySQL数据库执行基本的增删改查

《Go语言连接MySQL数据库执行基本的增删改查》在后端开发中,MySQL是最常用的关系型数据库之一,本文主要为大家详细介绍了如何使用Go连接MySQL数据库并执行基本的增删改查吧... 目录Go语言连接mysql数据库准备工作安装 MySQL 驱动代码实现运行结果注意事项Go语言执行基本的增删改查准备工作

Java实现本地缓存的四种方法实现与对比

《Java实现本地缓存的四种方法实现与对比》本地缓存的优点就是速度非常快,没有网络消耗,本地缓存比如caffine,guavacache这些都是比较常用的,下面我们来看看这四种缓存的具体实现吧... 目录1、HashMap2、Guava Cache3、Caffeine4、Encache本地缓存比如 caff

Android 缓存日志Logcat导出与分析最佳实践

《Android缓存日志Logcat导出与分析最佳实践》本文全面介绍AndroidLogcat缓存日志的导出与分析方法,涵盖按进程、缓冲区类型及日志级别过滤,自动化工具使用,常见问题解决方案和最佳实... 目录android 缓存日志(Logcat)导出与分析全攻略为什么要导出缓存日志?按需过滤导出1. 按

DNS查询的利器! linux的dig命令基本用法详解

《DNS查询的利器!linux的dig命令基本用法详解》dig命令可以查询各种类型DNS记录信息,下面我们将通过实际示例和dig命令常用参数来详细说明如何使用dig实用程序... dig(Domain Information Groper)是一款功能强大的 linux 命令行实用程序,通过查询名称服务器并输

java如何实现高并发场景下三级缓存的数据一致性

《java如何实现高并发场景下三级缓存的数据一致性》这篇文章主要为大家详细介绍了java如何实现高并发场景下三级缓存的数据一致性,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 下面代码是一个使用Java和Redisson实现的三级缓存服务,主要功能包括:1.缓存结构:本地缓存:使

Apache Ignite缓存基本操作实例详解

《ApacheIgnite缓存基本操作实例详解》文章介绍了ApacheIgnite中IgniteCache的基本操作,涵盖缓存获取、动态创建、销毁、原子及条件更新、异步执行,强调线程池注意事项,避免... 目录一、获取缓存实例(Getting an Instance of a Cache)示例代码:二、动态

Spring Boot3.0新特性全面解析与应用实战

《SpringBoot3.0新特性全面解析与应用实战》SpringBoot3.0作为Spring生态系统的一个重要里程碑,带来了众多令人兴奋的新特性和改进,本文将深入解析SpringBoot3.0的... 目录核心变化概览Java版本要求提升迁移至Jakarta EE重要新特性详解1. Native Ima