hibernate入门(加载策略、管理对象、一级缓存及快照)

行列式详解:从定义到应用 本文系统介绍了行列式的核心概念和应用。首先从二阶、三阶行列式入手,逐步扩展到n阶行列式的定义,讲解了余子式和代数余子式的概念。其次,详细阐述了行列式的重要性质,包括转置不变性、行列交换变号等基本性质以及乘积性质等推论。在计算方法方面,介绍了按行展开法、化上三角矩阵法等实用技巧,并列举了特殊行列式的计算案例。最后重点讨论了行列式在克拉默法则、矩阵可逆性判断、几何体积计算及线性相关性判断等领域的应用。文章强调理解行列式的几何意义和灵活运用性质的重要性,并给出了学习建议和常见误区提示。行列式作为连接代数与几何的桥 阅读详情

加载策略

指hibernate查询数据时,采用什么样的方式将数据写入内存。Hibernate中提供了两种方式来加载数据:懒加载和即时加载。

懒加载:懒加载又称延迟加载,指使用hiberante API查询数据时,不会立即将数据写入内存。而是等到真正使用数据时才会发出sql语句,到数据中查询数据。

即时加载:指使用hibernate API查询数据时,会立即发出sql语句,查询数据。并将数据写入内存。

就例如你在打游戏,朋友让你去帮个忙,你说等一下再去,就不是必须立即执行的,可以理解为延迟加载,而在真的必须去执行的比如说上课了,你必须停止你的游戏去上课,就是即时加载。

而hibernate有一个工具类,将通用的部分构成的

package com.zengjing.util;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class SessionFactoryUtils {
	private static final String HIBERNATE_CONFIG_FILE = "hibernate.cfg.xml";

	private static ThreadLocal<Session> threadLocal = new ThreadLocal<Session>();

	// 创建数据库的会话工厂
	private static SessionFactory sessionFactory;

	// 读取hibernate核心配置
	private static Configuration configuration;

	static {
		try {
			configuration = new Configuration();
			configuration.configure(HIBERNATE_CONFIG_FILE);
			// 创建Session会话工厂
			sessionFactory = configuration.buildSessionFactory();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public static Session openSession() {
		Session session = threadLocal.get();
		if (null == session) {
			session = sessionFactory.openSession();
			threadLocal.set(session);
		}
		return session;
	}

	public static void closeSession() {
		Session session = threadLocal.get();
		if (null != session) {
			if (session.isOpen())
				session.close();
			threadLocal.set(null);
		}
	}

	public static void main(String[] args) {
		Session session = SessionFactoryUtils.openSession();
		System.out.println("Session状态:" + session.isOpen());
		System.out.println("Session会话已打开");
		SessionFactoryUtils.closeSession();
		System.out.println("Session会话已关闭");
	}
}


load 懒加载/延迟加载示例

懒加载的支持关键字是load

在使用我们的懒加载时,我们如果找不到结果,会出现ObjectNotFoundException 异常,如下代码:

package com.zengjing.test;
import org.hibernate.Session;
import org.hibernate.Transaction;
import com.zengjing.entity.User;
import com.zengjing.util.SessionFactoryUtils;
public class Demo2 {
	public void users() {
		//获取session
		Session session = SessionFactoryUtils.openSession();
		//开启事务
		Transaction ts= session.beginTransaction();
		User user=new User();
		user.setId(3);
		User user2 = session.load(User.class, user.getId());
		//提交事务
		ts.commit();
		//释放资源
		session.close();
		System.out.println(user2);
		
	}
	public static void main(String[] args) {
		Demo2 d=new Demo2();
		d.users();
	}
}


为什么报错?

因为懒加载是在用的时候去调用SQL语句查询,而在我输出的位置前我已经将session关闭,就会导致报错。将关闭session放在输出语句后面就 不会报错啦!

get 立即加载示例

如果get获取不到值的话,结果为null

package com.zengjing.test;
import org.hibernate.Session;
import org.hibernate.Transaction;
import com.zengjing.entity.User;
import com.zengjing.util.SessionFactoryUtils;
public class Demo2 {
	public void users() {
		//获取session
		Session session = SessionFactoryUtils.openSession();
		//开启事务
		Transaction ts= session.beginTransaction();
		User user=new User();
		user.setId(6666);
		User user2 = session.get(User.class, user.getId());
		//提交事务
		ts.commit();
		//释放资源
		session.close();
		System.out.println(user2);
	}
	public static void main(String[] args) {
		Demo2 d=new Demo2();
		d.users();
	}
}


结果:

在这里插入图片描述

代理对象

这里的代理对象指的是我们缓存在session当中的对象,我们所使用的的取的对象都是缓存在session当中的代理对象。

hibernate管理对象的三种状态

hibernate管理对象的三种状态:临时状态、持久状态、游离状态。

临时状态:例如你在店里与老板进行交流就处于临时状态。

持久状态:例如你和小学同学一直到现在关系都挺好的就处于持久状态。

游离状态:例如你和小学同学当初关系挺好的但是很久不联系了就处于游离状态。

解释:当使用构造函数new一个对象并加载到session后的时候会进入临时状态,当session加载了这个Javabean并进行save操作后会进入持久状态,在持久的状态把session进行close后或者提交事务后会进入游离状态,如果游离状态想进入到持久状态就要进行更新的操作。

hibernate管理对象的三种状态,实际上是hibernate对对象的操作在哪个地方。
在这里插入图片描述

一级缓存及快照

一级缓存:我们保存在session当中的数据其实就是缓存在session当中的,当session关闭时就会清空缓存。

为什么需要缓存?

提高性能,减少访问数据库次数。

快照:当我们查询数据的时候,查询的数据会保存到session当中并进入持久状态,其实也相当于副本,当数据放在session当中的时候,别人对数据库中的数据进行了更新,对我们是没有影响的,因为我们拿到的是更新前的数据,相当于给数据拍了个照片。

当hibernate查询对象的的时候,就是在一级缓存当中查询的,如果差不多,就会去数据库当中进行查询再更新到session当中,相当于一次快照。

hibernate中知道那些数据被更新和没被更新当你访问的数据在数据库中没被更新的时候是直接访问缓存中的数据,相当于少了一次访问数据库的过程让效率更高了,当你访问的数据被更新了它会去查询数据库中的数据到快照中。

STM32 DMA串口重定向printf:高效调试与性能优化实战 本文详细介绍了STM32 DMA串口重定向printf的实现方法与性能优势。通过对比传统方式的CPU高占用问题,阐述了DMA技术如何实现高效数据传输,大幅降低CPU负载。文章包含完整的代码实现、缓冲区管理技巧及实战调试方案,帮助开发者优化嵌入式系统调试效率。 阅读详情

相关推荐

(南京观海微电子)——TCON介绍

TCON又称:逻辑板,控制板,在液晶电视里的作用和CRT中的视放板相当,但有本质的区别,逻辑板不是一个纯粹的信号放大器,它输入是LVDS格式信号,而不是RGB。逻辑板的作用是把数字板送来的LVDS或TTL图像数据信号,时钟信号进行处理移位寄存器存储将图像数据信号,时钟信号转换成屏能够识别的控制信号行列信号RSDS控制屏内的MOSFET管工作而控制液晶分子的扭曲度。目前国内主要的TCON板生产商有视显光电。传统TCON的布局主要分为以下两种:X+C分离式和X+C一体式。

m0_75095200的博客 3834

Hibernate对象管理状态、加载策略、一级缓存和快照

这里写目录标题一级目录二级目录三级目录 一级目录 二级目录 三级目录

Dawn.x的博客 238

CentOS7无外网环境下MySQL8.0完整离线部署指南

本文详细介绍了在CentOS7无外网环境下,如何通过MySQL8.0二进制包进行完整离线部署。指南涵盖了从环境准备、依赖安装、用户与目录创建,到数据库初始化、服务配置及远程访问设置的全过程,并提供了关键的避坑技巧,帮助企业运维人员在内网环境中高效、稳定地搭建MySQL数据库服务。

xxx12的博客 1029

hibernate之管理对象的三种状态及一级缓存和快照(面试题)及加载策略和并发控制

转载请标明出处:https://blog.youkuaiyun.com/men_ma/article/details/106847165. 本文出自 不怕报错 就怕不报错的小猿猿 的博客 hibernate之管理对象的三种状态及一级缓存和快照(面试题)及加载策略和并发控制1.对象的三种状态(hibernate管理的对象)1.1 临时状态1.2 持久状态1.3 游离状态2.一级缓存、快照(面试题)2.1 一级缓存的概念2.2 快照的概念3.加载策略3.1 立即加载3.2 延迟加载 1.对象的三种状态(hibe.

men_ma的博客 197

Silvaco 学习笔记——物理模型:载流子产生复合模型

对载流子的复合机制进行总结

reactortiger的博客 1万+

[华为]华为无线控制器AC6508简单配置实例

用户需求:3个地址段,分别是领导、员工、访客,访问控制策略是只允许访客上网,不允许访客访问内网。 vlan173为设备的管理地址和AP获取的地址,领导、员工、访客的vlan分别是vlan131/vlan132/vlan133 首先是许可的下载,使用华为的账号登陆http://app.huawei.com/isdp ,然后按照说明输入许可,下载许可,将许可导入到设备。 web界面访问后,直接按照配置向导配置就可以了。 1.基本配置里主要配置license、设备名称、设备时间 2.端口配置:连接上

日子_很简单 2万+

hibernate对象的三种状态、一级缓存、加载策略

一、hibernate管理对象的三种状态: 1、临时状态 2、持久状态 3、游离状态 1、hibernate是通过管理对象来操作数据,这里对象指的是持久化对象。 2、hibernate中的三种状态的对象是可以相互转换的,通常编码时只关注持久 化对象。关注get、save、update方法所操作后的对象 二、一级缓存、快照 一级缓存,又被称为session级别的缓存,session.get方法执行的时候,将查询出来的对象形成快照保存到内存中 当调用对象的set方法时、session.

m0_68879220的博客 228

Java开发者必看:如何快速对接七大主流快递API(附完整代码示例)

本文为Java开发者提供了快速对接顺丰、京东、DHL等七大主流快递API的实战指南。文章深入剖析了不同API的认证、通信协议与参数差异,并提供了高可用的HTTP客户端配置、通用签名工具、SOAP请求处理以及可扩展的领域模型与适配层设计等完整代码示例,帮助开发者构建统一、健壮的物流集成框架,显著提升开发效率。

tech5的博客 727

hibernate的三种状态、一级缓存、加载策略

一、hibernate管理对象的三种状态: 1、临时状态 2、持久状态 3、游离状态 1、hibernate是通过管理对象来操作数据,这里对象指的是持久化对象。 2、hibernate中的三种状态的对象是可以相互转换的,通常编码时只关注持久 化对象。关注get、save、update方法所操作后的对象 二、一级缓存、快照 一级缓存,又被称为session级别的缓存,session.get方法执行的...

qq_43226989的博客 204

置顶必读(2) | 《YOLOv11实战:从入门到深度优化》目录导航篇(持续更新中)

🏆 本文收录于 《YOLOv11实战:从入门到深度优化》 专栏。 本专栏系统梳理并持续复现全网各类 YOLOv11 / YOLO系列改进方案与实战案例,目前已覆盖 分类、检测、分割、追踪、关键点、OBB 检测 等多个方向。 内容坚持 持续更新 + 深度拆解 + 工程落地导向,不仅讲“怎么改”,更讲“为什么这样改、如何真正落地到项目中”。

**My Coding Family** 11万+

【DaVinci Configurator专题】-5-通过Data Mapping自动创建CAN信号关联的Port并添加到APP SWC

目录 1 导入CAN Matrix变更后的Arxml文件 2 自动创建CAN信号关联的APP Port 3 CAN信号与App SWC的接口映射/连接 4 结尾 <--返回「实战篇」博文-总目录--> <--返回「Autosar从入门到精通-实战篇」专栏主页--> 关键词: DaVinci Developer DaVinci Configurator Pro ARXML AUTOSAR System Description Network Explorer 1

「汽车电子助手」的博客 5129

hibernate加载策略

文章目录对象的三种状态Hibernate 中 load()和 get()区别立即加载 get()延迟加载 load()代理对象并发控制快照一级缓存 对象的三种状态 临时状态 例如你在大街上遇到一个陌生人你们在进行交流相当于临时状态 持久状态 小学同学玩到现在还一直玩到一起叫做持久状态 游离状态 之前关系比较好现在几年没联系了(如果见到可能关系和以前一样或许会陌生)叫做游离状态 三种状态 当你去new实体类的时候加载到session中它们是处于临时状态的,当session加载javabean去调用save的时

qq_45384482的博客 368

π0.5部署实战(一) ------ 在Thor上使用NVFP4量化

此篇文章是pi05模型在thor上部署系列文章的第一篇.主要介绍如何对pi05 2.6B LLM(Gemma)使用nvfp4进行量化.所有操作使用开源工具可以先参考进行环境的准备和安装,在上完成以下操作.

happyAnger6的专栏 401

hibernate管理对象的三种状态、一级缓存、懒加载以及立即加载

一、hibernate管理对象的三种状态: 1、临时状态 例如:User user = new User; new 为临时状态 2、持久状态 例如:User user =get(user ); get为持久状态 3、游离状态 例如:session.close(); 关闭后为游离状态 1、hibernate是通过管理对象来操作数据,这里对象指的是持久化对象。hiber...

KidShmily的博客 296

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Hibernate之对象的三种状态、一级缓存、加载策略

一、hibernate管理对象的三种状态: 1、临时状态 2、持久状态 3、游离状态 1、hibernate是通过管理对象来操作数据,这里对象指的是持久化对象。 2、hibernate中的三种状态的对象是可以相互转换的,通常编码时只关注持久 化对象。关注get、save、update方法所操作后的对象 二、一级缓存、快照 一级缓存,又被称为session级别...

qq_41097820的博客 263

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

hibernate对象的三种状态以及加载策略 .附加一级缓存讲解 和 并发控制

1. 对象的三种状态(hibernate管理的对象) 1.1 临时状态 (new delete) 1.2 持久状态(get save update) 1.3 游离状态 (close) 注意: 1、hibernate通过管理对象来操作数据库,这里对象指的是持久态的对 象 2、各种状态的对象是可以相互转换 **2. **一级缓存、快照(orm特性:对象 关系 映射)对象改变数据改变 一级缓存讲解 ...

Soul717的博客 385

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

【hibernate】状态、一级缓存、快照及加载策略

1.hibernate管理的对象的三种状态(临时状态,持久状态,游离状态) Tips: ①:hibernate是通过管理对象来操作数据的,这里指的值持久化对象。 ②:hibernate中的三种状态的对象是可以相互转换的,通常编码时只关注持久化对象。关注get,save,update方法操作后的对象。 2:一级缓存、快照(orm特性) Configuration cf...

qq_40979551的博客 255

hibernate对象及一级缓存

1. 对象的三种状态(hibernate管理的对象)   1.1 临时状态   1.2 持久状态   1.3 游离状态      1、hibernate是通过管理对象来操作数据,这里对象指的是持久化对象。   2、hibernate中的三种状态的对象是可以相互转换的,通常编码时只关注持久   化对象。关注get、save、update方法所操作后的对象    2. 一级缓存、快照(orm特性) ...

qq_41915592的博客 208

hibernate的加载策略及可能出现的问题

重点: 对象的三种状态(hibernate管理的对象); 一级缓存、快照(orm特性); 加载策略; 并发控制; 在写代码中出现的错误解决; 重点解析: 对象的三种状态(hibernate管理的对象) 1.1 临时状态 1.2 持久状态 1.3 游离状态 总结: 1、hibernate通过管理对象来操作数据库,这里对象指的是持久态的对象 2、各种状态的对象是可以相互转换 代码分析 Con...

cao_2000的博客 280

hibernate的加载策略

hibernate是通过管理对象来操作数据的。这里对象值得是持久性对象。 对象的三种状态: 临时状态 持久状态 游离状态 这三种状态的对象是可以相互转换的,通过编码时只关注持久化对象。也就是get/save/update方法所操作后的对象。 一级缓存 作用:提高CPU的运行效率 一级缓存越大,CPU的运行效率越高,但受到CPU内部结构的限制,一级缓存的容量都很小。 hibernate中的一级缓存...

qq_41038970的博客 138

Hibernate的入门

Hibernate前言对象的三种状态(hibernate管理的对象)一级缓存与快照加载策略总结 前言 今天分享的是hibernate入门的相关知识,一起搬好小板凳来看看吧,理论知识会有点多噢,请耐心阅读! 我的上一篇博客:hibernate的初步介绍与学习 对象的三种状态(hibernate管理的对象) 1、临时状态 这个状态可以理解为暂时的、短暂的状态, 就像你在路上遇到一个不是很熟悉的朋友或者同事, 或许你会微笑地和Ta打个招呼走开! 2、持久状态 持久的一个状态可以理解为两个人好的一段友谊关系, 具

月亮投递员的博客 204
上一篇: Hibernate框架入门
下一篇: hibernate一级缓存及二级缓存及ehcache的简单测试
Jiang呀
博客等级 码龄7年 16粉丝 59原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值