hibernate运行机制

ORM框架 ORM框架是一种将对象模型与数据库关系模型之间进行映射的技术,它通过框架自动处理数据的持久化,使得开发者不需要编写大量的SQL语句,减少了繁琐的数据库操作代码。ORM框架的核心思想是将数据库表中的数据映射到应用程序中的对象,通过这些对象进行数据库操作,简化了开发过程。Hibernate:最经典的Java ORM框架,功能强大,支持多种数据库。:Java EE中的标准ORM规范,许多ORM框架(如Hibernate)都实现了JPA规范。MyBatis。 阅读详情

使用hibernate也有段时间了,以前都没有写相关的学习记录,最近面试被问到相关问题,现在有点空按个人的理解回头总结一下hibernate的运行机制,当做是一种复习吧。

Hibernate运行机制:

1、读取并解析配置文档

[java]  view plain copy
  1. Configuration cfg = new Configuration().configure();  

2、读取并解析映射文件,创建SessionFactory

[java]  view plain copy
  1. SessionFactory sf = cfg.buidSessionFactory();  

3、打开Session

[java]  view plain copy
  1. Session session = sessionFactory.openSession();  

4、创建事务Trasction

[java]  view plain copy
  1. Transaction tx = session.beginTransaction();  

5、持久化操作

[java]  view plain copy
  1. User user = new User();  
  2. user.setBirthday(new Date());  
  3. user.setName("name");  
  4. session.save(user);  

6、提交事务

[java]  view plain copy
  1. tx.commit();  

7、关闭Session

[java]  view plain copy
  1. session.close();  

8、关闭SessionFactory


以下是个简单的例子:

[java]  view plain copy
  1. package cn.flymouse.hibernate;  
  2.   
  3. import java.util.Date;  
  4.   
  5.   
  6. import org.hibernate.Query;  
  7. import org.hibernate.Session;  
  8. import org.hibernate.SessionFactory;  
  9. import org.hibernate.Transaction;  
  10. import org.hibernate.cfg.Configuration;  
  11. import cn.flymouse.hibernate.domain.User;  
  12.   
  13. public class Base {  
  14.   
  15.     public static void main(String[] args) {  
  16.         //读取并解析配置文档  
  17.         Configuration cfg = new Configuration().configure();  
  18.         //读取并解析映射文件,创建SessionFactory  
  19.         SessionFactory sf = cfg.buidSessionFactory();  
  20.         //打开session  
  21.         Session session = sf.openSession();  
  22.         //开启事务  
  23.         Transaction tx = session.beginTransaction();  
  24.         //持久化操作  
  25.         User user = new User();  
  26.         user.setBirthday(new Date());  
  27.         user.setName("name");  
  28.         session.save(user);  
  29.         //提交事务  
  30.         tx.commit();  
  31.         //关闭Session  
  32.         session.close();  
  33.         //关闭SessionFactory  
  34.         sf.close();  
  35.     }  
  36. }  
User类:

[java]  view plain copy
  1. package cn.flymouse.hibernate.domain;  
  2.   
  3. import java.util.Date;  
  4.   
  5. public class User {  
  6.     private int id;  
  7.     private String name;  
  8.     private Date birthday;  
  9.   
  10.     public int getId() {  
  11.         return id;  
  12.     }  
  13.     pubilc String getName(){  
  14.         return name;  
  15.     }  
  16.     public Date getBirthday() {  
  17.         return birthday;  
  18.     }  
  19.       
  20.     public void setId(int id) {  
  21.         this.id = id;  
  22.     }  
  23.     public void setName(String name) {  
  24.         this.name = name;  
  25.     }  
  26.     public void setBirthday(Date birthday) {  
  27.         this.birthday = birthday;  
  28.     }  
  29. }  
User的映射文件 User.hbm.xml(跟User类放同个目录) :

[html]  view plain copy
  1. <?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 package="cn.flymouse.hibernate.domain">  
  6.   
  7.     <class name="User">  
  8.         <id name="id">  
  9.             <generator class="native" />  
  10.         </id>  
  11.         <property name="name" unique="false"/>  
  12.         <property name="birthday" />  
  13.     </class>  
  14.       
  15. </hibernate-mapping>  
hibernate的配置文件 hibernate.cfg.xml(放在类路径下,即src目录下) :

[html]  view plain copy
  1. <!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.         <property name="connection.driver_class">com.mysql.jdbc.Driver</property>  
  8.         <property name="connection.url">jdbc:mysql:///test</property>  
  9.         <property name="connection.username">root</property>  
  10.         <property name="connection.password">123456</property>  
  11.         <!-- 方言,用于生成SQL语句 -->  
  12.         <property name="dialect">org.hibernate.dialect.MySQLDialect</property>  
  13.         <!-- 自动建表 -->  
  14.         <property name="hbm2ddl.auto">create</property>  
  15.         <property name="show_sql">true</property>  
  16.       
  17.         <mapping resource="cn/flymouse/hibernate/domain/User.hbm.xml"/>  
  18.     </session-factory>  
  19. </hibernate-configuration>  

Hibernate中的三种对象状态:

1.瞬时(transient):数据库中没有数据与之对应,超过作用域会被JVM垃圾回收器回收,一般是new出来且与session没有关联的对象。

2.持久(persistent):数据库中有数据与之对应,当前与session有关联,并且相关联的session没有关闭,事务没有提交;持久对象状态发生改变,在事务提交时会影响到数据库(hibernate能检测到)。

3.脱管(detached):数据库中有数据与之对应,但当前没有session与之关联;托管对象状态发生改变,hibernate不能检测到。


Hibernate相对于JDBC的一些优点:
1、对JDBC访问数据库的代码做了封装,大大简化了数据访问繁琐的代码;
2、Hibernate是一个基于JDBC的主流持久化框架,是一个优秀的ORM实现,他很大程度的简化DAO曾的编码
工作;
3、Hibernate使用Java发射机制,而不是字节码,增强程序来实现透明性;
4、Hibernate的性能非常好,因为他是一个轻量级框架,框架的灵活性很突出。它支持各种关系数据库从一对一到多对多的各种复杂工作;
Hibernate执行持久层访问步骤 NULL 博文链接:https://zhangzhi199129.iteye.com/blog/1585556 立即下载

相关推荐

CentOS 8下openLDAP服务器搭建避坑指南:从第三方仓库到phpLDAPadmin配置

本文详细介绍了在CentOS 8环境下搭建openLDAP服务器的完整流程,包括利用Symas第三方仓库解决官方仓库不支持的问题,以及phpLDAPadmin的配置技巧。内容涵盖环境准备、核心配置、安全加固、性能优化等关键环节,帮助系统管理员避开常见陷阱,实现高效稳定的LDAP服务器部署。

weixin_30919429的博客 407

Hibernate简介

Hibernate是一款流行的Java对象关系映射(Object-Relational Mapping,简称ORM)框架,用于简化Java应用程序与关系型数据库之间的交互。 Hibernate的主要特点: 开源框架:Hibernate作为开源软件提供给开发者,允许他们自由使用和贡献代码。 对象关系映射:Hibernate通过将Java对象模型与数据库表结构进行映射,允许开发人员以面向对象...

年轻就是资本的专栏 791

Xilinx ERNIC RoCEv2 FPGA实现与QP队列深度解析

本文深入解析Xilinx ERNIC RoCEv2在FPGA上的实现,重点剖析QP队列对的管理机制与深度优化策略。通过Verilog代码示例和工程实战,详细介绍了如何实现高吞吐量、低延迟的RDMA硬件卸载方案,为金融交易和数据中心应用提供性能优化指导。

solidity8miner的博客 875

Hibernate运行过程

Hibernate的运行过程: 1.应用程序先调用Configuration类,该类读取Hibernate的配置文件及映射文件中的信息,并用这些信息生成一个SessionFactory对象。 2.然后从SessionFactory对象生成一个Session对象,并用Session对象生成Transaction对象。

小草香香的博客 1051

机器学习(三) ----------线性回归算法(梯度下降+正则化)

线性回归算法在机器学习中具有核心地位,它以其简单性和直观性为基础,为理解数据间的关系提供了基本框架。作为许多复杂算法的基础,线性回归不仅用于预测目标变量,还用于解释自变量对目标的影响。同时,它也是机器学习入门的经典算法,对于推广机器学习知识和技术具有重要意义。

2301_77539454的博客 1865

CAN XL和10Base-T1S全对比:在区域架构中如何选择最适合的车载通信协议?

本文深入对比了CAN XL和10Base-T1S在车载网络架构中的性能差异,通过实测数据和典型应用场景分析,为区域架构设计提供选型指南。重点探讨了带宽、延迟、成本等关键指标,帮助工程师在ADAS传感器部署和车身控制网络优化中做出明智选择。

pear55的博客 591

hibernate的运行流程

  首先了解什么是对象关系映射,ORM(Object/Relationship Mapping):对象关系映射。对象关系映射是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。是通过使用描述对象和数据库之间映射的元数据,将java程序中的对象自动持久化到关系数据库中。   在MVC设计模式的javaweb中,hibernate一般作为模型层/数据访问层。hibernate通过配置文件(...

weixin_30432007的博客 154

Autodesk Revit软件二次开发:Revit二次开发中的插件设计与实现

在 Revit 中,族是构成建筑模型的基本单元,可以是门窗、家具等。通过自定义族,可以创建符合特定需求的建筑构件。参数化设计允许族的尺寸、形状等属性根据参数变化而变化。使用 Revit API 创建自定义族涉及多个步骤,包括定义族类型、设置参数、创建几何形状等。// 创建族文档// 定义参数Parameter param = family.FamilyManager.AddParameter("Width", BuiltInParameterGroup.PG_LENGTH, "宽度");

kkchenjj的博客 2229

面试官让我现场手写MyBatis框架,我10分钟就搞定了!!(全程实战,建议收藏)

很多小伙伴不知道像MyBatis和Hibernate这种ORM框架是如何实现的,今天,我们就手撸一个ORM框架,看看ORM框架到底是如何实现的!全程实战,建议收藏!

冰河的专栏 1万+

【27】软考软件设计师——数据流图(DFD)补全题满分精讲|下午15分大题深度拆解

本文是《软件设计师·50讲通关|从零基础到工程师职称》专栏第27篇,深度精讲**下午案例题第1道必考大题:数据流图(DFD)补全**,该题单题分值高达**12 ~ 15分**,是整张试卷最稳的保底得分大题。我结合多年备考复盘与真题阅卷规则,超详细拆解DFD四大核心元素标准定义、机考绘图规范、三层分层逻辑、**父图子图平衡刚性扣分规则**,升级强化版「DFD满分补全三步法」;复刻历年高频真题完整流程,拆解缺失数据流定位、实体/存储辨析、平衡改错、文字需求对照全流程,配套**阅卷满分答题话术、机考避坑细则

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 589

华为OD机试真题 新系统2026-04-01 C语言 实现【勇攀数字高峰】

请你在给定的数字地形图中寻找登山路径,数字代表当前位置的海拔高度,要求从最低海拔出发,不断攀登,最终到达最高山峰。你需要寻找所有满足条件的登山路径。地图已经保证最低海拔和最高山峰都只有一个。

MISAYAONE的博客 290

Hibernate运行机制:。

使用hibernate也有段时间了,以前都没有写相关的学习记录,最近面试被问到相关问题,现在有点空按个人的理解回头总结一下hibernate的运行机制,当做是一种复习吧。 Hibernate运行机制: 1、读取并解析配置文档         [java] view plaincopyprint? Configuration cfg = new Configu

woning123的博客 318

基于传统算法的半导体晶圆缺陷检测原理及代码(二)

了解基于传统算法的半导体晶圆缺陷检测原理和方法,对于深入理解半导体制造工艺和质量控制具有重要意义。在半导体制造技术持续创新的浪潮中,基于传统算法的缺陷检测技术也将不断演进,为半导体产业的高质量发展提供坚实可靠的技术支撑,确保在芯片制造的每一个环节都能精准识别和管控缺陷,推动半导体产业迈向更高的发展水平。基于传统算法的半导体晶圆缺陷检测技术在半导体制造的长期发展历程中扮演了重要角色,凭借其成熟的技术体系、较快的检测速度和相对较低的成本,在各个工艺阶段为保障晶圆质量发挥了关键作用。

m0_44975814的博客 2219

Hibernate运行机制分析

Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可 以随心所欲的使用对象编程思维来操纵数据库。 Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户 端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中 取代CMP,完成数据持久化

Aldeo 1531

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Hibernate运行机制

1、读取并解析配置文档 Configuration cfg = new Configuration().configure(); 2、读取并解析映射文件,创建SessionFactory SessionFactory sf = cfg.buidSessionFactory(); 3、打开Session Session session = sessionFactory.openSessio

Carl——拥抱变化、拥抱自然、拥抱互联网 462

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Hibernate内步运行机制详解

本文引自:http://blog.sina.com.cn/s/blog_4c0a082e010007dt.html   Session接口,是Hibernate框架的运行中心,它被用户程序调用,提供与持久化相关的诸多操作,如加载、添加、查询、更新和删除持久化对象,是实现用户程序持久化工作的主要接口,所以Session被称为持久化管理器。   Transaction接口,是用来指定原子操作...

sky_xin的专栏 199

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

web项目加入Struts,Hibernate,Spring后的运行机制

首先我们要知道三大框具体的功能与作用,然后就可以大概的了解三大框架的结合点。 一、Struts框架的机制就是MVC:M-model层既实体层,就拿简单的登录界面来说,我们在网页上需要用户名和密码,而用户名和密码就可以封装成一个用户实体类。V-view视图层,我们在前台看到的用html,javaScript,jsp,css等编写的页面就是视图层,C-control控制层,我们得到了实体,就要对实体

指尖岁月,“码”的人生 1704

hibernate常见面试题详解

整理hibernate常见面试题 简述hibernate运行原理或者工作原理 简述hibernate的get和load方法区别 简述hibernate数据三种状态 简述hibernate的缓存机制 简述hibernate中getCurrentSession和openSession区别 简述hibernate的乐观锁和悲观锁 简述hibernate的懒加载机制 简述hibernate...

wu1317581750的博客 2万+

Hibernate

[Hibernate] 屏蔽关系映射        -运行机制:               Client->  new Strudent() -> newConfiguration() -> new SessionFactory() -> new Session() ->session.Save(Student) -> persist DB          -配置文件(参考文档!)

Ice450028456的专栏 623

Hibernate框架简介

Hibernate的核心组件 在基于MVC设计模式的JAVA WEB应用中,Hibernate可以作为模型层/数据访问层。它通过配置文件(hibernate.properties或hibernate.cfg.xml)和映射文件(***.hbm.xml)把JAVA对象或PO(Persistent Object,持久化对象)映射到数据库中的数据库,然后通过操作PO,对数据表中的数据进行增,删,改,查等操作。 除配置文件,映射文件和持久化类外,Hibernate的核心组件包括以下几部分: a)Conf.

weixin_57763462的博客 311

【SSH】Hibernate:核心类和接口

Hibernate的核心类和接口一共有6个,分别为:Configuration、SessionFactory、Session、Query、Criteria和Transaction。这6个核心类和接口在任何开发中都会用到。通过这些接口,不仅可以对持久化对象进行存取,还能够进行事务控制。其中Query和Criteria是 hiernate 3中对Session 中find方法的取缔。

一支穿云箭 1828

hibernate学习思想

学习Hibernate的时候即集中所有精力来理解Hibernate的运行原理,集中精力来掌握持久层设计应该把握的原则和技巧.

JANE的专栏 544
上一篇: hibernate级联
下一篇: spring IOC 实现原理模拟实现
andyLiuJava
博客等级 码龄14年 0粉丝 31原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值