理解Hibernate框架

RK3588多核NPU并行加速yolo优化教程:基于线程池的高性能推理实现 本教程详细介绍了RK3588多核NPU的并行加速优化方法。RK3588搭载三个独立NPU核心,总计算能力达6TOPS,但传统单线程方式无法充分发挥其性能。文章从硬件架构分析入手,详细讲解了三核心独立处理架构和多种工作模式,并通过代码示例展示了线程池技术的实现原理。线程池通过预创建工作线程、任务队列和条件变量等核心组件,避免了频繁创建线程的开销,能显著提升NPU的并行处理效率。教程还提供了性能计算公式和内存带宽优化策略,帮助开发者最大化利用RK3588的硬件算力,实现高性能AI推理。 阅读详情

一、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> 


nvidia jetson orin调试 MAX96712 serdes相机(SG2-AR0233C-GMSL2) 背景:想了解一下关于nvidia orin camera相关的模块,基于Drive Orin demo板的话,没有合适的相机,用 nvsipl框架点亮 GMSL相机不知如何下手,那么基于nvidia Jetson orin的话,目前国内有对应的转接板以及GMSL相机可以参考,基于此,那么本文详细记录一下关于nvidia orin的相关踩坑记录;需要Nvidia Jetson Orin开发板一个,MIPI转接板一个,MIPI转GMSL转接板一个,GMSL线束(fakra单线束),GMSL摄像头一个。 阅读详情

相关推荐

深入解析璞致PZ-ZU47DR RFSoC核心板:硬件架构与多通道ADC/DAC设计实战

本文深入解析璞致PZ-ZU47DR RFSoC核心板的硬件架构与多通道ADC/DAC设计实战。作为Xilinx Zynq UltraScale+ RFSoC系列的代表产品,PZ-ZU47DR集成了8通道5GSPS ADC和8通道9.85GSPS DAC,支持直接射频采样,大幅简化射频链路设计。文章详细介绍了其技术优势、设计挑战及实战技巧,为5G小基站、毫米波等应用场景提供高效解决方案。

meat5的博客 834

hibernate的工作原理

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

皓月星辰 3663

时间卷积网络(TCN):结构+pytorch代码

文章目录TCNTCN结构1-D FCN的结构因果卷积(Causal Convolutions)膨胀因果卷积(Dilated Causal Convolutions)膨胀非因果卷积(Dilated Non-Causal Convolutions)残差块结构pytorch代码讲解 TCN   TCN(Temporal Convolutional Network)是由Shaojie Bai et al....

Leon_winter的博客 11万+

Hibernate基本原理

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

236

时间加强控制图,累计和控制图详细介绍,公式,计算 UCL,LCL,CL, sigma,C#实现

\(k\):参考值(通常取为检测偏移量的一半,例如 \(k = \frac{\delta \sigma}{2}\),\(\delta\)是希望检测的偏移量,\(\sigma\)是过程标准差)。- 示例中假设目标均值 \(\mu_0 = 10.0\),标准差 \(\sigma = 0.5\),参考值 \(k = 0.25\)(检测1σ偏移),控制限常数 \(h = 4\)。例如,若希望检测1个标准差的偏移(\(\delta = 1\)),则 \(k = 0.5\sigma\)。

专注于前沿技术的探索与实践,热衷于从代码逻辑、架构设计到行业应用等多维度深挖技术本质。期待在技术之路上与你共同成长~ 814

RT-DERT安卓部署教程

这个文档中的代码案例,实现了拍照和选图识别,两个功能,可以看效果图。UI做了美化:显示类别机和数量。代码下载地址:通过网盘分享的文件:android_rtdert.zip链接: https://pan.baidu.com/s/1k6e-d_lov1OPgUmit5i_cA?pwd=hpfi 提取码: hpfi–来自百度网盘超级会员v8的分享。

AIOT魔法师 196

Hibernate基本原理及概念详解

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

春风化雨 2730

二极管限幅电路和钳位电路

二极管限幅电路和钳位电路学习

HW-BASE的博客 928

hibernate框架原理

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

猿脑2.0的博客 566

C#【必备技能篇】Winform实现多语言切换(.resx文件的应用)

在实际的项目开发中,软件需要实现多语言切换。本文通过一个实际的例子,可以让你学习到这个技能。

星Yeah 的博客 1万+

YOLOv11 改进 - 特征融合 | 小目标检测救星:DySample动态上采样减少特征丢失

本文介绍了超轻量且高效的动态上采样器DySample与YOLOv11的结合,以解决传统上采样器工作负载大、应用场景受限的问题。DySample从点采样角度构建上采样,绕过动态卷积,使用PyTorch标准内置函数实现,无需定制CUDA包,能大幅减少参数、FLOPs等资源消耗。我们将DySample代码集成进YOLOv11。实验脚本显示,结合DySample的YOLOv11在多个密集预测任务中或表现出色。

魔改工程师的博客 1415

hibernate面试题

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

848

到底什么是指令集?什么是微架构?他们是什么关系?

指令集、处理器架构、芯片厂商、ARM、x86,其间关系还在迷糊吗?一文迅速理清!!

车载系统攻城狮 7811

理解hibernate框架

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

每一步 162

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

NTscan扫描工具

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

Hibernate 框架理解

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

weixin_30782293的博客 120

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

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

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

liupeng900605的专栏 2406

老版QQ原生表情gif动态

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

对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、付费专栏及课程。

余额充值