理解Hibernate框架

Muse Spark:功能、性能测试及使用方法 对于一个仅用九个月时间从零开始重建的团队来说,这样的健康状况和多模态测试结果无疑是迈出了坚实的第一步,并且经受住了独立测试的考验。Muse Spark 为每个产品确定了最重要的主题(A 产品的发布策略、B 产品的定价策略、C 产品的规模化策略),并提出了切实可行的具体行动方案。抽象视觉推理也遵循同样的模式:Muse Spark 的 ARC-AGI-2 得分为 42.5,而 GPT-5.4 和 Gemini 的得分都在 70 分左右。他的离职是由于组织结构的变化限制了他的角色,以及团队转向闭源开发。 阅读详情

一、hibernate的工作原理

上面的执行过程图已经很清晰的阐释了hibernate的运行过程:首先,应用程序先调用Configration类,该类读取hibernate的配置文件及映射文件中的信息(如果我们使用注解的话则不需要读取映射文件),并使用这些信息生成一个SessionFactory对象。接着,从SessionFacctory生成一个Session对象,并用Session对象生成Transaction对象。通过Session对象的get()、sava()、update()、delete()和saveOrupdate()等方法对PO进行加载,保存,更新,删除等操作;在查询的情况下,可通过Session对象生成一个Query对象,然后利用Query对象执行查询操作。如果没有异常,Transaction对象将提交这些操作结果到数据库中,否则会回滚事务。

hibernate.cfg.xml配置文件:

  1. <span style="font-size:14px;"><!DOCTYPE hibernate-configuration PUBLIC    
  2.     "-//Hibernate/Hibernate Configuration DTD 3.0//EN"    
  3.     "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">    
  4.     
  5. <hibernate-configuration>    
  6.     <session-factory>    
  7.         <!-- 设置数据库驱动 -->    
  8.         <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>    
  9.         <!-- 设置数据库URL -->    
  10.         <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate_first</property>    
  11.         <!-- 数据库用户名 -->    
  12.         <property name="hibernate.connection.username">root</property>    
  13.         <!-- 数据库密码 -->    
  14.         <property name="hibernate.connection.password">123456</property>    
  15.         <!-- 指定对应数据库的方言,hibernate为了更好适配各种关系数据库,针对每种数据库都指定了一个方言dialect -->    
  16.         <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>    
  17.       
  18.     <!-- 打印sql语句,方便调试 -->  
  19.         <property name="show_sql">true</property>  
  20.     <!-- 格式化sql语句,排版 -->  
  21.     <property name="foramt_sql">true</property>  
  22.     <!-- 指定hibernate生成数据库表的方式:create每次创建新表,update使用原表 -->  
  23.     <property name="hbm2ddl.auto">update</property>  
  24.     <!-- 使用session.getCurrentSession时需要打开该配置 -->  
  25.     <property name="hibernate.current_session_context_class">true</property>  
  26.   
  27.         <!-- 映射文件 -->    
  28.         <mapping resource="com/pechen/hibernate/User.hbm.xml"/>    
  29.     </session-factory>    
  30. </hibernate-configuration>  </span>  
*.hbm.xml映射文件:
[java]  view plain  copy
  1. <span style="font-size:14px;"><?xml version="1.0"?>    
  2. <!DOCTYPE hibernate-mapping PUBLIC     
  3.     "-//Hibernate/Hibernate Mapping DTD 3.0//EN"    
  4.     "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">    
  5. <hibernate-mapping>    
  6.     <!--生成默认为user的数据库表-->    
  7.     <class name="com.pechen.hibernate.User">    
  8.         <id name="id">    
  9.             <!-- 算法的核心思想是结合机器的网卡、当地时间、一个随机数来生成GUID -->    
  10.             <generator class="uuid"></generator>    
  11.         </id>    
  12.         <property name="name"></property>    
  13.         <property name="password"></property>    
  14.         <property name="createTime" type="date"></property>    
  15.         <property name="expireTime" type="date"></property>    
  16.     </class>    
  17.         
  18. </hibernate-mapping></span>  

hibernate概述

   1、好处

        (1)封装简化数据库代码

        (2)简化DAO层的编码工作

        (3)性能好,灵活,支持各种关系数据库

   2、工作流程

        (1)Configuration configuration = new Configuration().configure()

         加载hibernate.cfg.xml

        (2)SessionFactory sessionFactory = configuration.buildSessionFactory()

                读取配置文件参数(JDBC连接、数据库方言、hbm加载)

        (3)Session session = sessionFactory.getSession()

                从连接池中获取一个连接,并创建session对象

        (4)Transaction transaction = session.beginTransaction()

                开启事务

        (5)数据操作

        (6)transaction.commit()

提交事务

(7)close.session()

关闭会话

(8)sessionFactory.close()

关闭连接池

   3、hibernate对象的三种状态

         

(1)瞬时态(transient)

               通过new创建对象,与数据库没有关联,调用save()、saveOrUpdate()、persist()、get()、load()变为持久态

(2)持久态(persistent)

与session关联,有数据库标识,调用delete()变为瞬时态,调用evict()、close()、clear()变为游离态

(3)游离态(detached)

                脱离session管理,无法保证与数据库的一致性,调用update()、saveOrUpdate()、merge()、lock()变为持久态,调 用delete()变为瞬时态

   4、五个核心接口
        (1)Configuration

配置hibernate,创建sessionFactory对象

(2)SessionFactory

初始化hibernate,创建session对象,线程安全的,重量级,二级缓存

(3)Session

数据库操作,县城不安全的,轻量级,一级缓存

(4)Transaction

管理事务

(5)Query和Criteria

执行数据库查询

   5、三种检索策略
(1)立即检索

将被检索的对象及其关联对象加载,如get()

优点:频繁使用的关联对象能被加载到缓存

缺点:占内存,select语句太多

(2)延迟检索

第一次使用关联对象时才加载,如load()

优点:select语句减少,提高性能,节省内存空间

缺点:session关闭后,无法访问关联类对象

(3)左外连接检索

优点:select语句减少,方便应用程序寻找关联对象

缺点:复杂的数据关系导致性能下降,可能会加载不需要的对象占用内存

   6、三种查询方式

native sql、hql、criteria

二、常用方法区别总结

   1、save()、saveOrUpdate()、persist()

        save() 更新

        saveOrUpdate() 有主键就更新,没主键就插入

persist() 不保证插入,有可能推迟到flush()

   2、insert()、merge()

insert() 插入

merge() 如果设置了数据库中没有的ID,执行insert(),如果设置了数据库中有的ID,执行update()

三、hibernate缓存机制

   1、一级缓存

session级别,默认开启,当session关闭时,自动释放一级缓存

   2、二级缓存

sessionFactory级别,默认不开启

四、hibernate并发机制

   1、什么是并发

当数据没有锁定且多个用户的事务同时对一个数据库进行操作,有可能发生数据的不一致,或其他一些问题

   2、可能带来的问题
(1)第一类丢失更新

前者的事务执行更新,而后者的事务由于执行失败引起事务回滚,造成前者的执行结果同时丢失

(2)脏读

后者的事务查询到前者事务提交前的数据

(3)虚读

在同一事务执行两次查询的过程中,有另一事务对数据进行了增删,造成了查询结果不一致

(4)不可重复读

在同一事务执行两次查询的过程中,有另一事务对数据进行了更新,造成了查询结果不一致

(5)第二类丢失更新

两事务同时进行写操作,后者事务的执行结果覆盖了前者事务的执行结果

   3、四种事务隔离级别

(1)串行化(Serializable)

(2)可重复读(Repeatable)

(3)可读已提交(Read Committed)

常用

(4)可读未提交(Read Uncommitted)

   4、乐观锁和悲观锁
(1)乐观锁

为数据库表添加版本号或时间戳,以此识别是否为过期数据

(2)悲观锁

为数据加锁,只有在事务提交时才会释放锁,使数据持久化

五、其他问题

    1、异常分析
        (1)在tomcat 启动时报错

                Disabling contextual LOB creation as createClob() method threw error:java.lang.reflect.Invocation

                这是由于hibernate默认用jdbc连接数据库,如果配置了连接池,需要修改相关配置。

                以整合后的ssh为例,你只需要在applicationContext.xml中配置hibernate属性的时候,加入

                <prop key="hibernate.temp.use_jdbc_metadata_defaults">false</prop> 


OpenClaw 源代码深度分析报告 &如何把企业自有的MCP server 工具集成到OpenClaw里? 怎样通过OpenAI 风格SDK 解析出来OpenClaw的全部的流式输出内容? 项目属性详情名称OpenClaw版本2026.3.2许可证MIT语言最低运行时包管理器pnpm主要仓库},// 注册工具// 工具实现},});// 注册命令" }),});},方面评价模块化设计⭐⭐⭐⭐⭐ 插件架构清晰,扩展性强协议设计⭐⭐⭐⭐⭐ WebSocket 协议完善,支持多种客户端多渠道支持⭐⭐⭐⭐⭐ 20+ 消息通道,覆盖主流平台安全机制⭐⭐⭐⭐ 配对认证、设备签名、权限控制完善本地优先⭐⭐⭐⭐⭐ 数据本地存储,用户完全控制项目属性详情名称OpenClaw版本。 阅读详情

相关推荐

从格雷码到多频外差:结构光相位展开实战指南(附Python仿真代码)

本文深入探讨了结构光三维测量中的相位展开技术,重点对比了格雷码和多频外差法在工业检测、逆向工程等领域的应用。通过详细的原理图解和Python仿真代码,展示了两种方法在精度、抗噪性和适用场景上的差异,为实际工程中的技术选型提供实用指南。

weixin_42535703的博客 434

hibernate的工作原理

1、hibernate 简介:          hibernate是一个开源框架,它是对象关联关系映射的框架,它对JDBC做了轻量级的封装,而我们java程序员可以使用面向对象的思想来操纵数据库。 hibernate核心接口 session:负责被持久化对象CRUD操作 sessionFactory:负责初始化hibernate,创建session对象 configuration:负责配置并启...

皓月星辰 3663

AI智能体安全沙箱agentguard:为LLM代码执行筑起防火墙

在AI应用开发领域,大语言模型(LLM)驱动的智能体(Agent)能够自动生成并执行代码,极大地提升了自动化能力。然而,赋予AI直接执行系统命令的权限也带来了显著的安全风险,如恶意代码注入、敏感数据泄露和系统资源滥用。为了解决这一核心矛盾,安全沙箱技术应运而生,它通过在不可信代码与宿主系统之间建立隔离层,实现"默认拒绝、最小权限"的安全原则。agentguard项目正是这一理念的工程实践,它结合白名单机制与容器化隔离,为AI智能体提供了可配置、可审计的安全执行环境。该方案不仅适用于内部自动化工具开发,也为构

weixin_28695537的博客 297

Hibernate基本原理

一、Hibernate是对JDBC进一步封装 原来没有使用Hiberante做持久层开发时,存在很多冗余,如:各种JDBC语句,connection的管理,所以出现了Hibernate把JDBC封装了一下,我们不用操作数据,直接操作它就行了。 二、我们再从分层的角度来看 典型的三层架构:表示层,业务层,还有持久层。Hiberante也是持久层的框架,而且持...

236

复合材料RVE建模与力学性能分析实战指南

代表体积元(RVE)建模是复合材料多尺度分析的核心技术,通过建立微观结构与宏观性能的定量关联,可准确预测材料力学行为。本文基于ABAQUS平台,详细解析三材料(纤维/基体/界面相)RVE建模全流程,包括参数化几何建模、周期性网格划分策略、材料属性定义技巧等关键技术环节。针对碳纤维增强环氧树脂等典型复合材料,提供网格控制参数建议和材料参数参考表,并重点说明周期性边界条件的实现方法与验证标准。通过Python脚本自动化处理和优化分析流程,可显著提升计算效率,为复合材料设计提供可靠仿真依据。

weixin_34062469的博客 549

避坑指南:Unity与Visual Studio开发环境配置中的5个常见问题及解决方案

本文针对Unity与Visual Studio开发环境配置中的5个常见问题,提供了详细的解决方案。重点解决了项目文件生成失败导致命名空间无法识别、调试器无法附加、包管理器与扩展安装混乱、脚本编译错误以及多版本环境冲突等核心痛点,帮助开发者构建稳定高效的开发调试环境。

weixin_27791839的博客 281

Hibernate基本原理及概念详解

1、Hibernate是什么 Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的ORM(Object-Relative Database-Mapping)框架,hibernate可以自动生成SQL语句,自动执行,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库。 Hibern...

春风化雨 2730

Vector CANape的使用记录

开门见山,今天想和大家分享下CANape使用记录,分享原因是近日在分析一个客户现场软件问题时,需要用到CANape来实时的监测ECU中的变量,因为之前对CANape的认知比较浅薄,觉得标定工程师使用他就足够了,但是这次的经历让我觉得需要写点东西来记录自己学习并使用他的过程。 相信大家能够在网上找到很多关于如何使用CANape的文章,从新建Project到后面的数据的观测、保存以及回放等等。我个人也是这么学过来的,所以我不打算从那些方面着手去描述如何使用她,而是根据我的真实使用过程以及问题的抛出到如何解决来

2万+

hibernate框架原理

Hibernate 是一个开源的对象关系映射(Object-Relational Mapping,ORM)框架,它对JDBC进行了封装,使得Java程序员可以使用面向对象的编程思维来操作数据库。Hibernate 可以自动将Java对象映射到数据库表,将对象之间的关系映射到表与表之间的关系。

猿脑2.0的博客 566

Ubuntu20.04复现instant-ngp,自建数据集,导出mesh

本次仅仅记录一下自己复现instant-ngp的过程,如果里面的参考有冒犯到原博主请联系我删除,本人也是nerf的小白一枚,可以一起交流学习神经辐射场,希望大家在复现instant-ngp的时候少走一些坑,情况允许下可以去复现一下npg-pl和nerfStudio,最后希望大家一起进步。看到一些博主说葵司的npg_pl也不错,而且葵司是台湾人,在youtube上也有讲解的视频。渲染的效果还是可以的,相对于源码来说还是有点模糊,我一些参数也没有设置,直接就拉进来进行渲染,速度是非常快的。

weixin_59961223的博客 9451

Google antigravity 不支持你所在地区?手把手教你把账号改成支持地区

Google antigravity功能火爆,但国内老账号根本用不了🤬本文分享几种有效的账号国家地区切换方法,最快几分钟就能让antigravity直接亮起🔥

XiaoqiangClub的博客 2万+

hibernate面试题

一、Hibernate工作原理: 读取并解析配置文件 读取并解析映射信息,创建SessionFactory 打开Sesssion 创建事务Transation 持久化操作 提交事务 关闭Session 关闭SesstionFactory   二、Hibernate有什么好处: 对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。 Hibernate是一

848

使用 Fargate 在 AWS ECS 上运行 Spring Boot 应用程序

本文介绍了使用AWS Fargate支持的ECS部署SpringBoot应用的完整流程。主要内容包括:1)将SpringBoot应用打包为Docker镜像并推送至ECR;2)创建任务定义配置CPU、内存和网络等参数;3)设置ECS服务管理任务运行;4)配置负载均衡器分配流量;5)设计VPC网络和安全组规则确保安全访问;6)使用SSM参数存储管理敏感信息。整个过程实现了无服务器化部署,既保持了应用控制权,又免除了基础设施管理负担,是扩展Web服务的可靠方案。

介绍AWS Azure GCP devops Terraform 等技术 512

理解hibernate框架

只有足够的经历才能更好的理解一个框架的作用。 例如:之前,知道hibernate框架是用来持久化数据的。但觉得用jdbc我就可以实现了,为什么要使用hibernate框架那么麻烦呢。直到昨天晚上,有个外包项目。跟我正在做的很一样,只是数据库不同。在这种情况下,如果使用hibernate框架作持久化数据操作,那么整个已经有的程序更改起来真得快多了。而直接使用jdbc操作数据库的话,由于数据库的不同操...

每一步 162

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

假人有限元模型

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

Hibernate 框架理解

  Hibernate框架简化了java应用程序与数据库交互的开发。Hibernate是一个开源,轻量级的ORM(对象关系映射)工具。   ORM工具简化浏览数据的创建,数据处理和数据访问。它是将对象映射到数据库中存储的数据(表)的编程技术。   ORM工具内部使用JDBC API与数据库进行交互。   Hibernate框架的优点: 开源和轻量级:Hibernate看见是根...

weixin_30782293的博客 120

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

struts、spring、hibernate三个框架的理解

Hibernate工作原理及为什么要用? 原理:   1.读取并解析配置文件   2.读取并解析映射信息,创建SessionFactory   3.打开Sesssion   4.创建事务Transation   5.持久化操作   6.提交事务   7.关闭Session   8.关闭SesstionFactory 为什么要用:   1.    对JDBC访问数据库的代码

liupeng900605的专栏 2406

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

对Hibernate框架的理解

    使用JDBC做数据库相关功能开发会做很多重复性的工作,比如创建连接,关闭连接,把字段逐一映射到属性中。 Hibernate把这一切都封装起来了,使得数据库访问变得轻松而简单,代码也更加容易维护。 下面做一个简单的表映射:1.准备表product_, 有3个字段,分别是主键id(自增长)字符串格式的name浮点数格式的priceuse test; CREATE TABLE product_...

IT_boy_Jason的博客 760

Hibernate框架概念理解

Hibernate的整体架构图如下: Hibernate核心API详解: 1.Configuration配置对象 hibernate.cfg.xml:通过标签化的语言进行配置,配置形式更加多样,配置内容更加丰富。 hibernate.properties:用于配置key/value形式的内容,但是key无法重复,有很多局限性,一般不使用。 Configuration对象的...

qq_34387317的博客 250

流行的框架之谈谈对Hibernate的理解

:1.面向对象设计的软件内部运行过程可以理解成就是在不断创建各种新对象、建立对象之间的关系,调用对象的方法来改变各个对象的状态和对象消亡的过程,不管程序运行的过程和操作怎么样,本质上都是要得到一个结果,程序上一个时刻和下一个时刻的运行结果的差异就表现在内存中的对象状态发生了变化。 2.为了在关机和内存空间不够的状况下,保持程序的运行状态,需要将内存中的对象状态保存到持久化设备和从持久化设备中恢复

u010244958的专栏 924

图形化Hibernate框架理解

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34310785的博客 176

Java ssh 框架 hibernate 详细理解

Hibernate框架技术相信对大多数的 java 程序员并不陌生,数据表之间的关系如何通过Hibernate来建立,需要我们认真的分析数据表中数据项之间的交互; 数据库表的之间的关系有: (1)一对多(1:n)(班级:学生) (2)多对多 (m:n)(订单;商品) (3)一对一 (1:1)用的 比较少 合并到 一个 表就可以达到需求 今天首先研究一下啊 表的一对多关系 ...

dibiaochou5363的博客 201

hibernate框架的理解重点

/*  * sessionFactory.openSession() 数据操作过程中:  *                 使用save,update,delete方法时 需要开启事务   执行commit方法 事务要手动断臂  *                 执行查询 load/get 不需要开启事务  *  *    * sessionFactory.getCurrentS

qq_19816777的博客 430

主流框架Struct2 Spring Hibernate的理解

1、Struts的理解。      1. struts是一个按MVC模式设计的Web层框架,其实它就是一个大大的servlet,这个Servlet名为ActionServlet,或是ActionServlet的子类。我们可以在web.xml文件中将符合某种特征的所有请求交给这个Servlet处理,这个Servlet再参照一个配置文件(通常为/WEB-INF/struts-config.xml)将

不如养猪! 1012

【java面试】对ORM框架(如Hibernate、MyBatis)的理解和使用经验

对于简单的查询,我会使用框架提供的查询语言(例如Hibernate的HQL、MyBatis的XML配置文件),通过面向对象的方式进行查询。通过框架的封装,我们可以使用面向对象的语法来操作数据库,不再需要编写复杂的SQL语句。ORM框架(Object-Relational Mapping)是将对象和关系数据库之间的映射,通过面向对象的方式进行数据操作的工具。在实际使用中,我们需要了解框架的配置和使用方法,同时也要注意性能优化和源码阅读,以更好地发挥ORM框架的作用。

qq_31532979的贺公子之数据科学与艺术博客,致力于科技向善,拥抱开源,要用技术的影响力来领导团队,而不是威权和职位! 594

Hibernate学习笔记一:Hibernate框架的搭建与配置,Hibernate的各个对象理解

文章目录Hibernate学习笔记一:Hibernate框架的搭建与配置Hibernate框架意义搭建Hibernate框架在ClassPath路径下书写hibernate.cfg.xml这是主配置文件hibernate.hbm.xml的书写(orm元数据文件的配置)Hibernate框架API详解Configuration对象详解SessionFactory对象的创建制作hibernateUti...

公子&小白的博客 716

深入浅出的理解框架(Struts2、Hibernate、Spring)与 MVC 设计模式

深入浅出的理解框架(Struts2、Hibernate、Spring)与 MVC 设计模式 现在许许多多的初学者和程序员,都在趋之若鹜地学习Web开发的宝典级框架:Struts2,Spring,Hibernate。似乎这些框架成为了一个人是否精通Java,是否会写J2EE程序的唯一事实标准和找工作的必备基础。  然而,如果在面试的时候问这些程序员,你们为什么要学习这些框架?这些

zygzzp的专栏 1277
上一篇: Redis在java中的使用
下一篇: 连接池的工作机制
橘子汽水&白茶乌龙
博客等级 码龄10年 33粉丝 53原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值