Hibernate5的Session接口浅析

大数据审计常用的算法模型 数据预处理:用聚类算法(K-Means)对数据分组,缩小分析范围;异常初筛:用孤立森林/DBSCAN快速标记疑似异常样本;风险分级:用随机森林/XGBoost对疑似异常打分,确定核查优先级;关联深挖:用FP-Growth挖掘异常样本背后的人员/流程关联;文本佐证:用BERT分析相关合同/审批文本,获取舞弊证据。例如,某审计项目通过“K-Means分组→孤立森林标异常→FP-Growth找关联→BERT审合同”的流程,仅用1周就完成了过去3个月需10人团队的工作量,且挖出2起隐藏的串标舞弊案。 阅读详情

Session接口的基础知识
Session接口时Hibernate5中的核心接口,Session对象是Hibernate5技术的核心,持久化对象的生命周期、事务的管理及持久化对象的增加、修改和删除都是通过Session对象来完成的。Hibernate5在操作数据库之前必须先取得Session对象。
Session对象不是线程安全的,一个Session对象最好只由一个单一线程来使用。同时该对象的生命周期要比SessionFactory短,其生命通常在完成数据库中一个短暂的系列操作之后结束。一个应用系统中可以自始自终只有一个SessionFactory对象。Session对象通过SessionFactory对象的getCurrentSession()或者openSession()方法获取,代码如下:

Configuration cfg=new Configuration().configure("hibernate.cfg.xml");
SessionFactory sf=cfg.buildSessionFactory();
Session session=sf.openSession()

获取Session对象后,Hibernate5内部并不会立即获取操作数据库的java.sql.Connection对象,而是等待Session对象真正需要对数据库进行增、删、改、查等操作时,才会从数据库连接池中的获取Connection对象。

Session类在定义上与普通的JavaBean类没有区别,但他也有独特的方法,其方法按用途可分为以下5类:

  1. 获取持续化对象:get()和load()等方法。
  2. 持久化对象的保存、更新和删除:save()、update()、saveOrUpdate()和delete()等方法。
  3. createQuery()方法:用来从Session生成Query对象。
  4. beginTransaction()方法:用来从Session生成Transaction对象。
  5. 管理Session的方法:isOpen()、flush()、clear()、evict()和close()等方法。其中isOpen()方法用来检查Session是否仍然打开;flush()方法用来清理Session缓存,并把缓存中的SQL语句发送出去;clear()方法用来清除Session中的所有缓存对象;evict()方法用于清除Session缓存中的某个对象;close()方法用来关闭Session。

通过方法获取持久化对象
获取持久化对象的方法只要有两种:get()方法和load()方法,它们都是通过主键id来获取持久化对象的。

1、使用get()方法获取持久化对象
例如:

public Object get(Class className,Serializable id)

className是类名,id是对象的主键,如果id的类型是int,可通过new Integer(id)的方法生成一个Integer对象。
以下代码是获取一个主键id为66的UserInfoPO对象:

UserInfoPO ui=(UserInfoPO)session.get(UserInfoPO.class,new Integer(66));

get()方法获取持久化对象时的执行过程如下:

  1. 通过id在Session缓存中查找对象,如果存在与id主键-值对应的对象,直接将其返回;
  2. 如果在Session缓存中没有查询到对应的对象,则在二级缓存中查找,找到后将其返回;
  3. 如果在前两个步骤的操作中都没有找到该对象,则从数据库中加载拥有此id的对象;

从上面步骤可以看出,get()方法并不总是发送SQL语句查询数据库,只有缓存中无此数据时,才向数据库发送SQL语句获取数据。

2、使用load()方法获取持久化对象
基本作用和get()方法差不多,其主要区别如下:
(1)、当立即加载PO时,如果对象存在,get()方法和load()方法没有区别,他们都可以取得已初始化的对象;但当对象不存在且是立即加载时,get()方法返回null,而load()方法则弹出一个异常。因此使用load()方法时,要确认查询的主键id一定是存在的。
(2)、当延迟加载对象时,get()方法仍然使用立即加载的方式发送SQL语句,并得到已初始化的对象,而load()方法则根本不发送SQL语句,它返回一个代理对象,这个对象直接被访问使用时才被初始化。

操作持久化对象的常用方法
1、使用save()方法操作持久化对象
使用save()方法可将一个持久化对象的属性取出放入PreparedStatement(具有预编译功能的SQL类)语句中,然后向数据库表中插入一条记录。下面的代码把一个新建UserInfoPO对象持久化到数据库中,即把一条记录插入到数据库中。

UserInfoPO ui=new UserInfoPO();       
ui.setID(66);									//为对象设定一个id值
Session session=sf.openSession();				//打开Session
Transaction tx=session.beginTransaction();  	//开启事务
session.save(ui);								//调用save()方法保存数据
tx.commit();									//提交事务
session.close();								//关闭Sessioon

当Session保存一个持久化对象时,按照如下步骤进行操作
(1)、根据映射文件中的配置为主键id设置生成算法,为info指定一个id。
(2)、将UserInfoPO对象存入Session对象的内部缓存中。
(3)、当事务提交时,清理Session对象缓存中的数据,并将新对象通过Hibernate5框架生成的insert into语句持久化到数据库中。

在调用save()方法时,并不立即执行SQL语句,而是等到清理完缓存后在执行。如果在调用save()方法后又修改了UserInfoPO的属性,则Hibernate5框架将会发送一条insert into语句和一条update语句来完成持久化操作。

UserInfoPO ui=new UserInfoPO();       
ui.setID(66);									//为对象设定一个id值
ui.setUserName("李想一");						//设定用户名的值
Session session=sf.openSession();				//打开Session
Transaction tx=session.beginTransaction();  	//开启事务
session.save(ui);								//调用save()方法保存数据
ui.setUserName("李想二");						//设定用户名的值
tx.commit();									//提交事务
session.close();								//关闭Sessioon

因此,最好是在对象状态稳定(即属性不再发生变化)时在调用save()方法,这样可以少执行一条update语句。

2、使用update()方法操作持久化对象
Session的update()方法可以用来更新脱管对象到持久化对象。

UserInfoPO ui=new UserInfoPO();       
Session session=sf.openSession();				//打开Session
Transaction tx=session.beginTransaction();  	//开启事务
ui=(UserInfoPO)session.get(UserInfo.class,new Integer(66));
ui.setUserName("李想");
session.update(ui);								//更新脱管对象
tx.commit();									//提交事务
session.close();								//关闭Sessioon

使用update()方法时,HIbernate5框架并不会立即发送SQL语句,而是将对象的更新操作积累起来,在事务提交时由flush()清理缓存,并发送一条SQL语句完成全部更新操作。

3、使用saveOrUpdate()方法操作持久化对象
对脱管对象使用save()方法是不对的,对临时对象使用update()方法也是不对的,所以为了解决这个问题,便产生了saveOrUpdate()方法。

UserInfoPO ui=new UserInfoPO(); 
ui.setId(66);      
Session session=sf.openSession();				//打开Session
Transaction tx=session.beginTransaction();  	//开启事务
ui=(UserInfoPO)session.get(UserInfo.class,new Integer(66));
session.saveOrUpdate(ui);						//使用方法保存数据
tx.commit();									//提交事务
session.close();								//关闭Sessioon

4、使用delete()方法操作持久化对象
Sessiondedelete()方法负责删除一个对象(包括持久化对象和脱管对象)。

UserInfoPO ui=new UserInfoPO();       
Session session=sf.openSession();				//打开Session
Transaction tx=session.beginTransaction();  	//开启事务
ui=(UserInfoPO)session.get(UserInfo.class,new Integer(66));
session.delete(ui);								//删除持久化对象
tx.commit();									//提交事务
session.close();								//关闭Sessioon

使用delete()方法删除对象时,会出现一些性能上的问题。例如从以上代码中可以看出,当删除一个对象时,先调用get()方法加载这个对象,然后调用delete()方法删除对象,但此过程发送了一条select和delete语句。实际上select语句是不必要的,这种情况在批量删除时尤为明显。为了解决批量删除时产生的性能问题,常用的方法是使用批量删除操作。

UserInfoPO ui=new UserInfoPO();       
Session session=sf.openSession();				//打开Session
Transaction tx=session.beginTransaction();  	//开启事务
Query q=session.createQuery("delete from UserInfoPO");  //使用HQL语句进行删除
q.executeUpdate();								//删除对象
tx.commit();									//提交事务
session.close();								//关闭Sessioon
SpringBoot系列之实现一个AI聊天助手 本文介绍了基于Spring Boot框架实现的AI聊天助手项目。该项目使用Spring Boot 3.2.3、Spring AI 1.0.0-M5等技术栈,集成DeepSeek-R1-Distill-Llama-8B模型实现智能对话功能。文章详细介绍了项目配置流程、运行方式和核心代码实现,包括ChatMessage模型类和服务类ChatService的关键功能,如消息处理、历史记录管理和AI响应获取等。读者可通过提供的GitHub链接获取完整代码,快速搭建自己的AI聊天应用。 阅读详情

相关推荐

手把手教你用GEM-2多频电磁仪找地下管道(附真实数据图)

本文详细解析了使用GEM-2多频电磁仪精准定位地下管线的全流程,包括设备调试、频率选择、现场扫描技巧及数据解读。通过真实案例展示了如何应对复杂干扰环境,提升管线检测效率与准确性,特别适合市政工程和地下管线普查。

weixin_42565652的博客 396

Hibernate中Session的get和load

hibernate中Session接口提供的get()和load()方法都是用来获取一个实体对象,在使用方式和查询性能上有一些区别。测试版本:hibernate 4.2.0。 get Session接口提供了4个重载的get方法,分别通过“持久类+主键”和“全类名+主键”以及“锁选项”来获取实体对象。 public Object get(Class clazz, Serializable...

weixin_30352191的博客 346

Silvaco TCAD | 从极化效应到高频开关:GaN HEMT仿真设计与性能验证

本文深入探讨了使用Silvaco TCAD进行GaN HEMT仿真设计与性能验证的关键技术。从极化效应到高频开关特性,详细解析了2DEG形成机制、器件结构设计优化及高频特性仿真技巧,帮助工程师提升GaN HEMT的性能与可靠性。通过实战案例展示了如何通过仿真优化击穿电压和导通电阻,实现开关品质因数的显著提升。

weixin_30872337的博客 484

Hibernate5.3基础配置,创建SessionFactory和关联映射的注解

注*:引入注解时,@Entity等为javax.persistence包。Cascade和CascadeType为org.hibernate.annotations包.这里用的为Hibernate5.3 与之前创建SessionFactory有些不一样,在文章后面附上代码。 双向多对一 ‘多’的一方表 book,‘一’的一方表 publishers,主表为book book实体类 @I...

wt_shi 2939

Jetson编译安装pycuda

可使用nvcc --version查看是否有信息输出,若没有,且安装cuda的情况下,需要手动将CUDA 的路径添加到环境变量中。编译生成_pvt_struct.cpython-38-aarch64-linux-gnu.so文件。基于jetson orin nano jetpack512模块上安装pycuda。4、获取pycuda源码(版本根据实际情况获取)2、进入conda环境并安装cuda工具包。9、若未检测出来需要清除并强制编译。7、编译成功后安装pycuda。5、配置编译并设置环境变量。

qq_48175141的博客 972

基于OSPF技术的某企业网络设计(完整文档+ENSP拓扑图)

主要对网络规划与设计,以企业网络为背景,对某个中型企业网络进行规划设计,该企业总部在南京,在常州有一个分公司,需要实现总部和分公司能够访问外网,能够让分公司内的用户或主机访问总部服务器的资源,并且保证数据的安全性。在这次总部企业网络设计中,考虑到资金的问题,核心层部署2台核心三层交换机,负责转发总部内部用户的流量,并充当内部用户网关,能够实现内部不同网段的用户之间的连通性。对于一些对网络比较敏感的企业或用户,对网络的要求较高,对于网络的稳定性和安全性也有较高的要求。

qq1325513482的博客 2万+

Hibernate 单例模式与查询

单例模式: SessionFactory是重量级的,一般情况下,一个项目通常只需要一个SessionFactory就够(单例模式),当需要操作多个数据库时,可以为每个数据库指定一个SessionFactory。 1.在dao包下,新建HibernateUtil.java文件,负责生成唯一一个SessionFactory //SessionFaction单态模式 public class HibernateUtil { private static SessionFactory sf=null;

qq_42962315的博客 244

C语言编写Picard迭代和牛顿迭代法

为了完成学校计算方法的作业,花了两个多星期将所有实验报告编写出来,看到同桌找代码的辛苦,优快云也没有这类代码,我只是一时兴起,想分享我写的代码与大家共飨,有错误还请多多指正,代码都不难,也是为了让优快云帮我保存下,我辛辛苦苦做出来的,倘若能给别人带来一丝一毫的帮助,我都万分荣幸。 1:什么是Picard迭代 先弄一个满足f(x) = 0的函数将其转化为x= 正在上传… 重新上传 取消 ...

mohenxiang的博客 4699

Hibernate(5)session的方法

1. Session缓存 Session缓存(Hibernate一级缓存),在 Session 接口的实现中包含一系列的 Java 集合, 这些 Java 集合构成了 Session 缓存。只要 Session 实例没有结束生命周期, 且没有清理缓存,则存放在它缓存中的对象也不会结束生命周期。 Session 缓存可减少 Hibernate 应用...

weixin_30820151的博客 302

海康工业相机SDK开发实战:从环境搭建到实时图像采集(附避坑指南)

本文详细介绍了海康工业相机SDK在Windows平台上的开发实战流程,涵盖从环境搭建、运行时库路径配置到实时图像采集的全过程。重点解析了MVS SDK部署、设备连接、参数设置及图像处理等核心环节,并提供了实用的避坑指南和错误排查方法,帮助开发者构建稳定的机器视觉系统。

weixin_29248611的博客 845

逻辑回归:利用Python实现二分类算法

通过使用Python编写的代码,我们可以训练逻辑回归模型并进行预测。接下来,我们将实现逻辑回归算法的训练函数。训练函数将接受训练数据集X和对应的标签y,以及学习率alpha和迭代次数num_iterations。训练完成后,我们可以使用训练得到的参数theta来进行预测。在这个例子中,我们有一个包含4个样本的训练数据集X,每个样本有两个特征。在这个例子中,如果预测概率大于等于0.5,则预测为类别1,否则预测为类别0。现在,我们可以使用训练函数来训练模型。根据给定的样本x_new,预测函数将返回相应的类别。

XlltEditor的博客 326

Hibernate5一级缓存Session和对象的状态

一、session简介         首先,SessionFactory 是线程安全的,SessionFactory 用到了工厂模式。 session接口: Session 接口负责执行被持久化对象的CRUD操作。  Session 接口是一个非线程安全的,避免多个线程共享一个Session实例。 Session 被称为持久化管理器。Session对象是Hibernate技术的核心,持久...

Charge8的博客 769

C++设计模式之观察者模式

观察者模式(Observer Pattern)是一种行为设计模式,它定义了对象之间的一对多依赖关系,当一个对象状态发生变化时,所有依赖于它的对象都会得到通知并自动更新。这种模式通常用于实现分布式事件处理系统,当一个对象(称为“主题”或“发布者”)改变状态时,所有注册的观察者都会收到通知。

每天进步一点点。 600

Hibernate5的Query接口浅析

Query接口的基本知识 使用Query对象可以方便的查询数据库中的数据,它主要使用HQL或者本地SQL查询数据。Query对象不仅能查询数据,还可以绑定参数、限制查询记录数量、实现批量删除和批量更新等。 Configuration cfg=new Configuration().configure("hibernate.cfg.xml"); SessionFactory sf=cfg.build...

monkey_wei的博客 1310

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Hibernate详解(5)——Hibernate核心接口和工作原理

Hibernate核心接口Hibernate有五大核心接口,分别是:Session Transaction Query SessionFactoryConfiguration 。这五个接口构成了Hibernate运行的基本要素,可以执行存取,持久化,事务管理等操作。这五个接口可以位于系统的业务逻辑层和持久化层。下面是一张Hibernate的关系图: Session接口:Session接口 Sess

李守宏 1万+

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

hibernate的5个核心接口

configuration接口 sessionFactory接口 session 接口 query接口 creteria接口 transaction接口 Configuration接口:配置Hibernate,根启动Hibernate,创建SessionFactory对象。   SessionFactory接口:初始化Hibernate,充当数据存储源的代理,创建Session对象。   Session接口:负责保存、更新、删除、加载和查询对象。   Transaction接口:管理事务。   Query.

xmh_sxh_1314的博客 637

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

Hibernate5的Transaction接口浅析

Transaction接口是对事务实现的一个抽象,这些实现包括JDBC事务或者JTA等。JTA允许应用程序执行分布式事务处理(在两个或者多个网络计算机资源上访问并且更新数据)。 Hibernate5框架中的事务通过配置hibernate.cfg.xml文件选择使用JDBC或者JTA事务控制。在Transaction接口中定义了commit()和rollback()两个方法,前者是提交事务的方法,后...

monkey_wei的博客 660

hibernate中session接口操作数据库

回顾hibernate 配置的步骤: 第一步、导入hibernate包,lib下面的required 第二步、src下面创建hibernate.cfg.xml project包里找到etc,打开hibernate.cfg.xml,导入doctype,复制dtd。 第三步、配置hibernate <hibernate-configuration> &...

culous的博客 1215

Hibernate5的认识和原理浅析

Hibernate是封装了JDBC的一种开放源代码的对象-关系映射(ORM)框架,是程序员可以使用面向对象的思想来操作数据库。Hibernate是一种对象-关系映射的解决方案,即将java对象与对象之间的关系映射到数据库表与表的关系。 Hibernate5的工作原理 Hibernate5的工作原理如下: 首先,Configuration读取Hibernate5的配置文件hibernate.cfg...

monkey_wei的博客 815

hibernate查询接口Query用法

hibernate的Session接口提供了get,load等按照id查询单个记录的方法,但是大多数时候,我们查询的是实体类的集合列表,这就需要用到复杂查询了,hibernate提供了类sql语句hql,他可以帮助我们编写复杂的查询语句,来做复杂的增删改查操作。这里介绍hibernate提供的Query接口用法。 Query接口的创建是通过Session来创建的,默认需要传入一个hql语句,比如...

feinifi的博客 1万+

hibernate中session接口方法总结

hibernate中session接口方法总结1.Session的save()和persist()方法Session的save()方法使一个临时对象转变为持久化对象。它完成以下操作:(1)将临时对象加入到Session缓存中,使其进入持久化状态。(2)选用映射文件指定的标识符生成器,为持久化对象分配唯一的OID。(3)计划执行一个insert语句。 Session的save()方法是用来持久化临...

Faerieyw的博客 654

Hibernate的session的理解

Session接口 Session接口对于Hibernate 开发人员来说是一个最重要的接口。然而在Hibernate中,实例化的Session是一个轻量级的类,创建和销毁它都不会占用很多资源。这在实际项目 中确实很重要,因为在客户程序中,可能会不断地创建以及销毁Session对象,如果Session的开销太大,会给系统带来不良影响。但值得注意的是 Session对象是非线程安全的,因...

a546835886的博客 845

Hibernate5个核心接口

所有的Hibernate应用中都会访问Hibernate的5个核心接口。   Configuration接口:配置Hibernate,根启动Hibernate,创建SessionFactory对象只有一个SessionFactory。   SessionFactory接口:初始化Hibernate,充当数据存储源的代理,创建Session对象。   Session接口:负责保存、更新、删除、

639

Hibernate的5个核心接口:Session、SessionFactory、Transaction、Query和Configuration

Session接口: Session接口负责执行被持久化对象的CRUD操作(CRUD的任务是完成与数据库的交流,包含了很多常见的SQL语句)。需要注意的是,Session对象是非线程安全的,同时,Hibernate的Session不同于JSP应用中的HttpSession。这里当使用Session这个术语时,其实指的是Hibernate中的Session,而以后会将HttpSession对象称为用户

行者常至 4611

Hibernate:核心接口

Hibernate的核心接口 Configuration 接口 配置Hibernate,根据其启动hibernate,创建 SessionFactory 对象; Configuration用于配置加载类,用于加载主配置,ORM数据加载,直接调用空参构造函数进行创建。 使用空参的函数configure()来加载src下名字为hibernate.cfg.xml的主配置文件,配置文件的名字大小写...

离开屏幕的光,哪盏灯照亮你的孤独? 203

Hibernate4 和 Hibernate5 创建session的区别

Hibernate4 和 Hibernate5 创建session的区别 Hibernate4 创建session: package cn.sz.utils; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; import o

侯春强的博客 4922
上一篇: Hibernate5的映射文件浅析
下一篇: Hibernate5的Transaction接口浅析
monkey_wei
博客等级 码龄8年 62粉丝 139原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值