Hibernate3综述

hibernateUtil中hibernate3和hibernate4的区别 以前一直在用Hibernate3 做应用系统,包括目前很多应用程序都是基于Hibernate3 写的,不过 Hibernate 4 都出来好久了,今天下载Hibernate 4.3 Final 版本,下来玩了一下, 发现 得到 sessionFactory 的方法过失了,虽然还是能用,但总感觉不爽. 所以看了下怎么写Hibernate4下的 Util类   Hibernate 3的 阅读详情
原理:

1.         读取并解析配置文件
2.         读取并解析映射信息,创建SessionFactory
3.         打开Sesssion
4.         创建事务Transation
5.         持久化操作
6.         提交事务
7.         关闭Session
8.         关闭SesstionFactory

1.Hibernate 的初始化

读取Hibernate 的配置信息,创建Session Factory

1)创建Configeration类的实例

它的构造方法:将配置信息(Hibernate config.xml)读入到内存。 
一个Configeration 实例代表Hibernate 所有Java类到Sql数据库映射的集合。

2)创建SessionFactory实例

把Configeration 对象中的所有配置信息拷贝到SessionFactory的缓存中。 
SessionFactory的实例代表一个数据库存储源,创建后不再与Configeration 对象关联。 
缓存(cache):指Java对象的属性(通常是一些集合类型的属性)占用内存空间。 
SessionFactory的缓存中:Hibernate 配置信息。OR映射元数据。 
缓存-大:重量级对象 小:轻量级对象

3)调用SessionFactory创建Session的方法
1】用户自行提供JDBC连接。
Connection con=dataSource.getConnection(); 
Session s=sessionFactory.openSession(con);
2】让SessionFactory提供连接
Session s=sessionFactory.openSession();
4)通过Session 接口提供的各种方法来操纵数据库访问。  

2.Hibernate 的缓存体系

一级缓存:
Session 有一个内置的缓存,其中存放了被当前工作单元加载的对象。 每个Session 都有自己独立的缓存,且只能被当前工作单元访问。
二级缓存 :
SessionFactory的外置的可插拔的缓存插件。其中的数据可被多个Session共享访问。
SessionFactory的内置缓存:存放了映射元数据,预定义的Sql语句。 

3.Hibernate 中Java对象的状态

1.临时状态 (transient)
特征:
1】不处于Session 缓存中 
2】数据库中没有对象记录
Java如何进入临时状态
1】通过new语句刚创建一个对象时 
2】当调用Session 的delete()方法,从Session 缓存中删除一个对象时。 
2.持久化状态(persisted)
特征:
1】处于Session 缓存中 
2】持久化对象数据库中设有对象记录 
3】Session 在特定时刻会保持二者同步
Java如何进入持久化状态
1】Session 的save()把临时-》持久化状态 
2】Session 的load(),get()方法返回的对象 
3】Session 的find()返回的list集合中存放的对象 
4】Session 的update(),saveOrupdate()使游离-》持久化

3.游离状态(detached)
特征:
1】不再位于Session 缓存中 
2】游离对象由持久化状态转变而来,数据库中可能还有对应记录。
Java如何进入持久化状态-》游离状态
1】Session 的close()方法 
2】Session 的evict()方法,从缓存中删除一个对象。提高性能。少用

Hibernate优点

1.    对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。
2.    Hibernate是一个基于JDBC的主流持久化框架,是一个优秀的ORM实现。他很大程度的简化DAO层的编码工作
3.    hibernate使用Java反射机制 ,而不是字节码增强程序来实现透明性。
4.    hibernate的性能非常好,因为它是个轻量级框架 。映射的灵活性很出色。它支持各种关系数据库 ,从一对一到多对多的各种复杂关系。
 
Hibernate延迟加载

1.         Hibernate2延迟加载实现:a)实体对象  b)集合(Collection)
2.         Hibernate3 提供了属性的延迟加载功能
当Hibernate在查询数据的时候,数据并没有存在与内存中,当程序真正对数据的操作时,对象才存在与内存中,就实现了延迟加载,他节省了服务器的内存开销,从而提高了服务器的性能。

Hibernate关系

类与类之间的关系主要体现在表与表之间的关系进行操作,它们都市对对象进行操作,我们程序中把所有的表与类都映射在一起,它们通过配置文件中的many-to-one、one-to-many、many-to-many、

 
优化Hibernate
 
         灵活使用单向一对多关联
         不用一对一,用多对一取代
         配置对象缓存,不使用集合缓存
         一对多集合使用Bag,多对多集合使用Set
         继承类使用显式多态
        表字段要少,表关联不要怕多,有二级缓存撑腰
缓存
hibernate是目前javaee项目中普遍采用ORM解决方案之一,但他提供的缓存机制以及其背后的设计初衷往往并不为开发者完全明了。以下阐述了笔者对hibernate缓存的理解和看法。
 
注:以下说明忽略了一级缓存
 
缓存原理:
 
     1 hibernate 只对实体对象缓存,不对属性级别缓存;

     2 如果启用了二级缓存,则所有通过hibernate查询到的实体对象都将被缓存到二级缓存;二级缓存的形式为 {key:value,...}形式的hash结构,其中key是实体的主键,value是实体对象。发生查询时,首先获取目标数据的所有id,然后拿这 些id去二级缓存中找,找不到就通过id查数据库,所以有可能会出现查询实体对象*N+1问题;

     3 如果启用了查询缓存,则所有通过hibernate查询到的实体对象都将被缓存到二级缓存和查询缓存,查询缓存的形式为 {key:value,...}形式的hash结构,其中key是hql查询语句,value是实体的主键集合。发生查询时,如果查询字符串与缓存的查询 串完全匹配,则用缓存的id去二级缓存中找,找不到就 通过id查数据库,所以有可能会出现查询实体对象*N+1问题;

     4 查询缓存的失效控制是以数据表为粒度的,只要数据表中任何一条记录发生改变,整个表相关的所有查询缓存就都无效了;(题外话:这和数据库的查询缓存失效策略是一致的)

     5 二级缓存和查询缓存的是否失效都由hibernate维护,如果不通过hibernate改变了缓存涉及到的数据库数据,则缓存不可能正确;

     6 对于写操作频繁的系统,必须设置严格的缓存并发策略,在这种情况下,二级缓存和查询缓存对提升数据访问性能的贡献有限,并且仍然存在数据藏读的可能。

     7 默认情况下,hibernate不缓存子对象,可以通过配置开启;
 
所以,如果你的应用系统

    1 使用hibernate作为唯一的数据访问代理;
    
    2 读操作频繁而写操作不频繁;
    
    3 常用查询比较简单,缓存命中率较高;
    
    4 数据不要求绝对的安全性;
 
你就可以使用hibernate缓存减轻你的工作负担。
 
从 以上说明看来,使用hibernate缓存似乎走入了一种全有或全无的误区。其实,hibernate缓存设计的初衷是为开发者提供一种可选的工具,并且 给应用开发提供了足够的自由,这种自由体现到了实体和操作的级别。比如你要使用二级缓存,不但要在.cfg.xml文件中开启,并且还需要 在.hbm.xml中指定,如果你需要,你还可以通过CacheMode在某种操作中禁止使用缓存。初看起来这样做真是不必要的麻烦,但实际上这正是 hibernate认为缓存只应该用在合适的地方的初衷。想想看,尽管在你的业务系统中,大部分数据都变化频繁,但总会有为数不少的元数据,而为这些变化 很少的元数据开启二级缓存甚至查询缓存,不但会提高系统性能,也会为你省去“手工”缓存的麻烦。也许更重要的一点,就是应用hibernate缓存方案不 需要改变你的程序,在你认为可以的地方,通过简单的配置,缓存方案就生效了,这就等于是给系统设计和优化提供了一种非常方便的可能性。
 
通过以上描述,是否使用hibernate缓存的原则可以变成下面这样:
 
如果你的系统或系统的某一部分数据
 
    1 使用hibernate作为唯一的数据访问代理;
    
    2 读操作频繁而写操作不频繁;
    
    3 常用查询比较简单,缓存命中率较高;
    
    4 数据不要求绝对的安全性;
 
你就可以使用hibernate缓存减轻你的工作负担。恩... 是的,我只是想强调“某一部分数据”这个概念。好好思考你的系统的需求和特点,对符合条件的数据使用hibernate缓存,也许就是对hibernate开发团队最好的致敬。
Hibernate3库在Eclipse中的全面应用教程 Hibernate3作为Java对象关系映射(ORM)解决方案的重要成员,在Java持久化领域中占有举足轻重的地位。自从2001年首次发布以来,Hibernate不断进化,已成为许多Java项目中不可或缺的组件之一。它使得开发者能够以面向对象的方式来操作关系数据库,极大地降低了数据库操作的复杂性,并提高了代码的可维护性和可移植性。Hibernate的API设计使得开发者能够以面向对象的方式进行数据库操作,同时保持了与数据库的无缝集成。 阅读详情

相关推荐

Windows系统下LaTeX环境搭建与编辑器配置全攻略

本文详细介绍了在Windows系统下搭建LaTeX环境的完整流程,包括TeX Live的安装、TeXStudio编辑器的配置优化以及常见问题排查。特别针对中文用户推荐使用清华镜像源加速下载,并提供了XeLaTeX编译器配置、中文支持等实用技巧,帮助用户快速上手LaTeX文档编写。

weixin_42554408的博客 449

Veritas NetBackup 10.1 Windows管理控制台部署与安全访问配置

本文详细介绍了Veritas NetBackup 10.1在Windows环境下的管理控制台部署与安全访问配置。从基础认知到实战部署,涵盖安装准备、分步指南、证书认证体系搭建及防火墙配置等关键步骤,帮助企业实现高效安全的备份管理。特别针对Web控制台的安全访问提供了深度解析与优化建议。

weixin_33910460的博客 370

整理笔记——二极管

二极管是一种由半导体材料制成的一种具有单向导电性能的电子元器件,二极管的核心是PN结。加在二极管两端的电压和通关的电流被成为,二极管的伏安特性曲线​​​二极管的正向特性:起初正向电压较小时,正向电流几乎没有,称之为死区,此时二极管处于截止状态。当电压差超过截止电压(0.5V或者0.7V),电流随着电压上升,开始增加缓慢,随后急剧增大,二极管的电阻变小进入导通状态,此时电压变化较小。二极管的反向特性:起初反向电流很小,不随电压二变化,此时成为反向饱和电流;当方向电压达到二极管的反向击穿电压。

#include 811

6.Hibernate综述

首先要明确Hibernate是对JDBC进行轻量级封装的ORM(对象关系映射)框架,处于项目的持久层。 Hibernate的基础是JAVA的反射机制! 为什么需要Hibernate? 在下面的项目的模型中,如果要更换底层的数据库类型,那么就势必要大量改写业务层的数据库操作代码! 此时,业务层的对象模型和数据库的关系模式形成了阻抗,即耦合性太强!会给开发带来很大的难度! 因此,我们可以...

五山口老法师 286

MIMO-OFDM 通信-感知一体化(ISAC)中的联合优化与性能权衡

本文深入探讨了MIMO-OFDM技术在通信-感知一体化(ISAC)系统中的核心作用与挑战。文章分析了如何通过联合优化资源分配、波束成形与波形设计,在有限的频谱与硬件资源下,实现通信速率与感知精度之间的最佳平衡,并指出了工程实践中面临的同步、干扰等关键难题。

dapp9builder的博客 215

开源TMS系统cortex-tms私有化部署与二次开发实战指南

运输管理系统(TMS)是现代物流数字化的核心组件,它通过将线下零散的物流操作转化为线上标准化、可追溯的数据流,实现订单、调度、跟踪与结算的全流程管理。其技术原理通常基于微服务架构,采用Spring Boot、Vue.js等成熟技术栈构建,确保系统的稳定性和可扩展性。TMS的技术价值在于显著提升物流企业的运营效率、降低成本并增强过程可控性,尤其适用于中小型物流企业实现从手工管理到系统化管理的跨越。在应用场景上,TMS广泛应用于车队管理、订单跟踪和财务结算等环节。本文聚焦于开源TMS项目cortex-tms,深

weixin_42523907的博客 746

Hibernate3与Hibernate4的区别,汇总

转自: http://blog.youkuaiyun.com/iaiti/article/details/9336703 http://blog.sina.com.cn/s/blog_3e20fc040100yhzq.html http://blog.youkuaiyun.com/u011672579/article/details/47402599

HackAge4619的博客 2440

Win11 24H2家庭版共享打印机失败?别慌,一个批处理脚本搞定所有设置

本文提供了Win11 24H2家庭版共享打印机失败的解决方案,通过一个批处理脚本自动修复所有设置问题。脚本包含安装组策略组件、修改关键注册表项等操作,帮助用户快速恢复打印机共享功能,适用于普通家庭用户。

weixin_30632089的博客 418

hibernate2与hibernate3区别及oracle

Hibernate3 的一些问题  做Hibernate第一个小例子就失败,原来是Hibernate2和Hibernate3的区别造成的  我用的是Hibernate3,而书上的例子、网上的例子全都是Hibernate2的,在网上的例子中{Eclipse快速上手Hibernate(http://blog.youkuaiyun.com/javamxj/archive/2005/04/02/335076.as

泡菜 3788

前拉后推计划逻辑适用于哪些行业和企业规模?

《前拉后推计划逻辑的行业适用性分析》摘要:前拉后推计划逻辑(需求端后推锚定交付、供应端前拉匹配资源)最适用于需求波动大且具规模效益的行业,包括家具制造(定制化需求+批量运输)、机械装备(非标设备+部件采购)、消费电子(短周期产品+核心部件备货)及汽车配套(交期绑定+批量生产)等领域。该模式要求企业具备:1)独立计划部门;2)ERP/MES等信息系统;3)资源冗余能力,故更适配中型(1-10亿营收)和大型企业(10亿+)。小型企业需简化应用,仅聚焦关键环节。不适配需求稳定(如快消品)、无规模效益或短周期生产的

追随内心 144

Spec Kit:GitHub 官方推出的规范驱动开发工具包,让 AI 编程真正可控、高效、高质量

先明确“做什么”和“为什么”,再考虑“如何做”。它通过一系列标准化命令(如/specify/plan/implement可验证的功能规格(spec)可执行的技术方案(plan)可追溯的开发任务(tasks)高质量的实现代码(code)最终实现“规范即代码,代码即规范”的闭环。📌项目地址许可证:MIT(完全开源,欢迎贡献)Spec Kit 代表了 GitHub 对AI 原生开发(AI-Native Development)AI 不应替代开发者,而应放大开发者的意图。

lpfasd123的博客 1711

Hibernate2与Hibernate3的区别

Hibernate2与Hibernate3的区别Hibernate3使用了java1.5的泛型语法,Hibernate3.0版本的变化包括三个方面:(1)API的变化,它将影响到Java程序代码。(2)元数据,它将影响到对象-关系映射文件。(3)HQL查询语句。值得注意的是, Hibernate3.0并不会完全取代Hibernate2.1。在同一个应用程序中,允许Hibernate3.0和

hi_jess的专栏 3641

大模型在电力交易功率预测中的应用:短期,超短期,中长期的完整解决方案代码详解

本文介绍了基于大模型的电力交易功率预测系统,该系统覆盖超短期(15分钟-1小时)、短期(1-6小时)和中长期(1天-1月)三个时间尺度。文章详细阐述了数据准备与特征工程,包括多源数据集成和特征重要性分析。在模型构建方面,采用了Temporal Fusion Transformer (TFT)模型进行超短期预测,Informer模型进行短期预测,以及N-HiTS模型进行中长期预测。此外,文章还探讨了概率预测与风险分析,并介绍了模型部署与交易策略集成的实现。最后,文章总结了系统的贡献,并展望了未来发展方向,如市

专注AI大模型,软件混淆,授权 1261

Spring中使用Hibernate3的Annotation

Hibernate3 Annotation的SessionFactory创建需要有两个地方与用mapping resource的方式不同:Configuration需要使用新的org.hibernate.cfg.AnnotationConfiguration需要使用新的mappingClass元素而不是使用mappingResourceorg.springframework.orm.hiberna

张玮的专栏 1万+

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

NTscan扫描工具

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

Hibernate 2 升级为Hibernate 3 的注意事项

    目的,主要是那当前的项目练手,熟悉一下hibernate2和hibernate3的差别,给当前项目一点扩展的空间。1.首先将hibernate2.jar替换为hibernate3.jar(hibernate-3.0.5)  hibernate-tools.jar也替换成新的(从hibernate-tools-3.0.0.alpha4a找出来的)2.将所有程序中的net.sf.hiber

Happy Winner 659

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Hibernate3.3使用

 在解压缩的hibernate-distribution-3.3.1.GA目录中,把hibernate.jar ,和\lib\required\下的所用jar包 引进到我们项目的lib目录下。         不知道用过Hibernate3.3开发的朋友会不会遇到过这样的问题:把上面的包都准备好的,开发Hibernate测试类时,会报Caused by: java.lang....

JAVA记事 242

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

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

Hibernate2升级为Hibernate3

关于将Hibernate2升级为Hibernate3的基本步骤说明 第一步:换jar包 即将hibernate2.1.jar包换成hibernate3.jar,这一步很简单这里就不具体说了。 第二步:修改Hibernate.cfg.xml文件(由于项目有遗留的原因)这里有部份模块采用的是Struts+Hibernate框架的 即将hibernate.cfg.xml文件中的 "-//Hibernat

jbgtwang的专栏 706

基于Hibernate3.2 Hibernate tools 的使用

 由于新发布的Hibernate Tools是一个比较庞大的工具包 而且已经是作为Eclipse3.2 的插件发布的然而以前的很有用的工具hbm2java和hbm2ddl都是非常有用的工具所以我们应该把这些有用的工具找出来继续使用  环境jdk-1_5_0_07ant 1.6.5Hibernate 3.2 cr2Hibernate Tools-3.2.0.beta6

Vincent的造轮子经验 1万+

hibernate3和hibernate4的区别?

hibernate3和hibernate4的区别? 1.数据库方言设置 org.hibernate.dialect.MySQL5Dialect 在3.3版本中连接MySQL数据库只需要指明MySQLDialect即可。在4.1版本中可以指出MySQL5Dialect 2.buildSessionFactory 4.1版本中buildSessionFactory()已经被buildSessionFa...

qq_42529023的博客 232

hibernate 2升级到 hibernate3

2月16日hibernate 2升级到 hibernate31.首先将hibernate2.jar替换为hibernate3.jar 2.将所有程序中的net.sf.hibernate替换为org.hibernate 3.但是有例外net.sf.hibernate.expression.Expression换为org.hibernate.criterion.Expression  如果用e

323

不用spring时,hibernate4跟hibernate3创建sessionFactory方式的

先是看一下现在刚刚遇到的,hibernate4的sessionfactory的创建方法,跟hibernate3区别还是挺大的; packagecom.ynwi.ssh.daoImpl; importorg.hibernate.HibernateException; impo...

151

hibernate3的QueryCache使用详解

最近看了查询缓存的2篇文章,特别有感悟,所以特别研究了下hibernate3源码,有了一点小小收获,所以这里总结一下 有2篇关于查询缓存的好文,这里推荐一下,感谢作者分享这么好的东西 数据库对象的缓存策略 [url]http://www.iteye.com/topic/9706[/url] 偶来谈谈Hibernte 的QueryCache。 [url]http://www.ite...

JAMES.TANG 524

Hibernate3入门指南

谨以此文献给还没使用但准备使用hibernate的朋友,万事开头难,我就以自己的经历来帮助大家迈出这最难的一步吧!   跟很多朋友一样,我初学hibernate时大费周折,看过众多的书也参与过几个跟hibernate有关的项目,但是从来没有自己去创建过一个hibernate的项目,因此我对hibernate的认识是非常肤浅的。终于有一天,我再也坐不住了,我必须创建自己的hibern

IamHades的专栏 2712

hibernate3找不到配套hibernate-extension

大家好,我用hibernate3和hibernate-extensions-2.1.3工具来根据映射文件生成java类文件,我的setenv.bat配置文件如下: @echo off rem ------------------------------------------------------------------- rem Setup environment for hi...

gufeng 176

springside3里面的hibernate

<br /><br />springside3里面的hibernate<br />以springside3里面的mini-web为例子来分析。<br /><br />src/main/java目录结构<br /><br />src/test/java目录结构<br />如果需要更换数据库的话,就要改2个文件即可。<br /><br />application.properties改数据库驱动,数据库源,数据库帐号密码,是否显示SQL语句等。<br />pom.xml是添加数据库驱动包的。<br />Mini

几个寂寞的程序员 2202

[Hibernate]hibernate4不使用hibernate3的AnnotationSessionFactoryBean配置sessionFactory

hibernate4在sessionFactory的配置中,和hibernate3有些区别,hibernate4使用org.springframework.orm.hibernate4.LocalSessionFactoryBean配置sessionFactory.而hibernate3使用org.springframework.orm.hibernate3.annotation.Annotatio

马叔叔的积累之路 1451
上一篇: hibernate缓存使用注意事项
下一篇: Spring事务配置详解
北斗安心联
博客等级 码龄16年 6粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值