- 浏览: 369138 次
文章分类
- 全部博客 (401)
- hibernate 入门 (24)
- it生活 (3)
- MapReduce 算法设计 (1)
- Android (13)
- java (6)
- web (4)
- 技术文章 (9)
- javascript (1)
- html5 (1)
- 数据库 (3)
- jquary (1)
- 1.网站首页原创Java技术区(对首页文章的要求: 原创、高质量、经过认真思考并精心写作。BlogJava管理团队会对首页的文章进行管理。) (0)
- 2.Java新手区 (0)
- 4.其他技术区 (0)
- 6.转载区(Java技术文章转载, 请注明原文出处) (0)
- 5.提问区(Java方面的技术提问) (0)
- servlet (1)
- IT 生活 (2)
- Struts2 (2)
- Struts 2 教程 (2)
- jQuery (1)
- DOM (1)
- ibatis,hibernate (1)
- 数据分析师 (1)
最新评论
-
NIIT_zhu:
我现在要做一个 基于exchange 2010的webmail ...
Exchange 2003 升级到Exchange 2010 之申请证书并分配服务! -
yinren13:
实在不行试试简单易用的turbomeeting,连接速度很快的 ...
QQ远程协助没动静?QQ版本有讲究 -
jicu7766240:
写得很好。赞一个!2年开发的我深有感触。这些我觉得说得很对。要 ...
老程序员的忠告:不要做浮躁的软件工程师 -
haohao-xuexi02:
好像很多人都买起却看不起书。。找各种理由不看。。我的书也这样 ...
老程序员的忠告:不要做浮躁的软件工程师 -
Judy123456:
希望可以提供源代码噢,我最近正好在学这个底部菜单,非常希望楼 ...
Android仿微信底部菜单
Hibernate对JDBC进行了封装,提供了更加面向对象的API。图2-4和图2-5对比了直接通过JDBC API及通过Hibernate API来访问数据库的两种方式。 图2-4 通过JDBC API访问数据库 图2-5 通过Hibernate API访问数据库 以下例程2-4的BusinessService类演示了通过Hibernate API对Customer对象进行持久化的操作。本章2.4节提到Hibernate没有渗透到域模型中,即在持久化类中没有引入任何Hibernate API。但是对于应用中负责处理业务的过程域对象,当然应该借助Hibernate API来操纵数据库。例程2-4 BusinessService.java:
以上例子演示了通过Hibernate API访问数据库的一般流程。首先应该在应用的启动阶段对Hibernate进行初始化,然后就可以通过Hibernate的Session接口来访问数据库。 2.5.1 Hibernate的初始化 BusinessService类的静态代码块负责Hibernate的初始化工作,如读取Hibernate的配置信息以及对象-关系映射信息,最后创建SessionFactory实例。当JVM(Java虚拟机)加载BusinessService类时,会执行该静态代码块。初始化过程包括如下步骤。 (1)创建一个Configuration类的实例,Configuration类的构造方法把默认文件路径下的hibernate.properties配置文件中的配置信息读入到内存:
(2)调用Configuration类的addClass(Customer.class)方法:
该方法把默认文件路径下的Customer.hbm.xml文件中的映射信息读入到内存中。 (3)调用Configuration类的buildSessionFactory()方法:
该方法创建一个SessionFactory实例,并把Configuration对象包含的所有配置信息拷贝到SessionFactory对象的缓存中。SessionFactory代表一个数据库存储源,如果应用只有一个数据库存储源,那么只需创建一个SessionFactory实例。当SessionFactory对象创建后,该对象不和Configuration对象关联。 因此,如果再修改Configuration对象包含的配置信息,不会对SessionFactory对象有任何影响。由于Java语言是纯面向对象的语言,因此不可能像C语言那样直接操纵内存,例如声明一段可用的内存空间。以上步骤(3)中提到了缓存的概念,这里的缓存其实指的是Java对象的属性(通常是一些集合类型的属性)占用的内存空间。 例如,SessionFactory的实现类中定义了许多集合类型的属性,这些属性用于存放Hibernate配置信息、映射元数据信息等:
如果对象的缓存很大,就称为重量级对象。如果对象占用的内存空间很小,就称为轻量级对象。SessionFactory就是个重量级对象,如果应用只有一个数据存储源,只需创建一个SessionFactory实例,因为随意地创建SessionFactory实例会占用大量内存空间。 SessionFactory的缓存可分为两类:内置缓存和外置缓存。SessionFactory的内置缓存中存放了Hibernate配置信息和映射元数据信息等;SessionFactory的外置缓存是一个可配置的缓存插件,在默认情况下,SessionFactory不会启用这个缓存插件。外置缓存能存放大量数据库数据的拷贝,外置缓存的物理介质可以是内存或者硬盘。本书第13章(管理Hibernate的缓存)对此做了详细介绍。 Hibernate的许多类和接口都支持方法链编程风格,Configuration类的addClass()方法返回当前Configuration实例,因此对于以下代码:
如果使用方法链编程风格,可以改写为:
方法链编程风格能使应用程序代码更加简捷。在使用这种编程风格时,最好把每个调用方法放在不同的行,否则在跟踪程序时,无法跳入每个调用方法中。 2.5.2 访问Hibernate的Session接口 初始化过程结束后,就可以调用SessionFactory实例的openSession()方法来获得Session实例,然后通过它执行访问数据库的操作。Session接口提供了操纵数据库的各种方法,如: save()方法:把Java对象保存数据库中。 update()方法:更新数据库中的Java对象。 delete()方法:把Java对象从数据库中删除。 load()方法:从数据库中加载Java对象。 find()方法:从数据库中查询Java对象。 Session是一个轻量级对象。通常将每一个Session实例和一个数据库事务绑定,也就是说,每执行一个数据库事务,都应该先创建一个新的Session实例。如果事务执行中出现异常,应该撤销事务。不论事务执行成功与否,最后都应该调用Session的close()方法,从而释放Session实例占用的资源。以下代码演示了用Session来执行事务的流程,其中Transaction类用来控制事务。
图2-6为正常执行数据库事务(即没有发生异常)的时序图。
图2-6 正常执行数据库事务的时序图
BusinessService类提供了保存、删除、查询和更新Customer对象的各种方法。BusinessService类的main()方法调用test()方法,test()方法又调用以下方法: 1.saveCustomer()方法 该方法调用Session的save()方法,把Customer对象持久化到数据库中。
当运行session.save()方法时,Hibernate执行以下SQL语句:
在test()方法中并没有设置Customer对象的id属性,Hibernate会根据映射文件的配置,采用increment标识符生成器自动以递增的方式为OID赋值。在Customer.hbm.xml文件中相关的映射代码如下:
在test()方法中也没有设置Customer对象的registeredTime属性,因此在以上insert语句中,REGISTERED_TIME字段的值为null。但由于REGISTERED_TIME字段的SQL类型为TIMESTAMP类型,如果insert语句没有为TIMESTAMP类型的字段赋值,底层数据库会自动把当前的系统时间赋值给TIMESTAMP类型的字段。因此,执行完以上insert语句后,REGISTERED_TIME字段的值并不为null,而是插入该记录时的系统时间。 2.findAllCustomers()方法 该方法调用Session的find()方法,查询所有的Customer对象。
Session的find()方法有好几种重载形式,本例中传递的是字符串参数"from Customer as c order by c.name asc",它使用的是Hibernate查询语言。运行session.find()方法时,Hibernate执行以下SQL语句:
3.loadAndUpdateCustomer ()方法 该方法调用Session的load()方法,加载Customer对象,然后再修改Customer对象的属性。
以上代码先调用Session的load()方法,它按照参数指定的OID从数据库中检索出匹配的Customer对象,Hibernate会执行以下SQL语句:
loadAndUpdateCustomer()方法接着修改Customer对象的address属性。那么,Hibernate会不会同步更新数据库中相应的CUSTOMERS表的记录呢?答案是肯定的。Hibernate采用脏检查机制,按照内存中的Customer对象的状态的变化,来同步更新数据库中相关的数据,Hibernate会执行以下SQL语句:
尽管只有Customer对象的address属性发生了变化,但是Hibernate执行的update语句中会包含所有的字段。在BusinessService类的test()方法中按如下方式调用loadAndUpdateCustomer ()方法:
以上代码并没有直接给customer对象的id属性赋值,当执行saveCustomer(customer)方法时,Session的save()方法把customer对象持久化到数据库中,并自动为id属性赋值。 4.printCustomer()方法 该方法打印Customer对象的信息,它有三种重载形式。当helloapp应用作为独立应用程序运行时,将调用printCustomer(PrintStream out,Customer customer)方法,向控制台输出Customer信息;当helloapp应用作为Java Web应用运行时,将调用printCustomer (ServletContext context,ServletOuputStream out,Customer customer)方法向Web客户输出Customer信息:
5.deleteAllCustomers()方法 该方法调用Session的delete()方法,删除所有的Customer对象:
Session的delete()方法有好几种重载形式,本例向delete()方法提供了字符串参数"from Customer as c",它使用的是Hibernate查询语言(HQL,Hibernate Query Language)。HQL是一种面向对象的语言,"from Customer as c"字符串指定的是Customer类的名字,而非CUSTOMERS表的名字,其中"as c"表示为Customer类赋予别名"c"。 运行session.delete()方法时,Hibernate先执行select语句,查询CUSTOMERS表的所有Customer对象:
接下来Hibernate根据Customer对象的OID,依次删除每个对象:
|
发表评论
-
Hibernate里面使用sql查询
2012-04-11 10:17 4081hibernate3.0中是可以使用sql语句,但一般还 ... -
Hibernate工作原理及使用理由
2012-04-11 10:01 16911.读取并解析配置文件2.读取并解析映射信息,创建S ... -
hibernate+sqlserver中文乱码的解决
2012-04-10 08:03 1803首先要编写一个编码过滤器,起编码如下: pa ... -
spring 配置 hibernate 二级缓存
2012-04-10 08:01 1536今天在配置spring + hibernate过程中出现些问题 ... -
spring + hibernate 二级缓存 ehcache
2012-04-09 10:05 12581:配置spring 文件 在sessionfactiory ... -
实现OSCache二级缓存的配置方案
2012-04-09 10:03 1072今天在使用hibernate的时候要配置二级缓存,给大家分享一 ... -
hibernate HQL 查询使用详解
2012-04-13 23:45 3667Hibernate Query Language(HQL)提供 ... -
JPA环境下使用Hibernate二级缓存
2012-04-13 23:45 751hibernate二级缓存本质上分为两类: 1.对象缓存 ... -
Hibernate JPA 的索引的使用
2012-04-13 23:44 912在Hibernate中Model中一个对象关联的对象相当多是必 ... -
Hibernate分页查询(使用HQL语言)
2012-04-12 21:29 1173例: import java.util.Iterator ... -
使用hibernate的HQL查询语言时参数需要为String类型
2012-04-12 21:29 1114本人新手,在使用hibernate的HQL查询语言时传进来的参 ... -
Hibernate缓存何时使用和如何使用
2012-04-12 21:29 1021<hibernate-mapping> < ... -
使用Hibernate实现多表查询
2012-04-12 21:29 1248项目中使用的是Hibernate框架,对于表查询一直只针对一张 ... -
Hibernate里面使用sql查询
2012-04-12 21:28 1004hibernate3.0中是可以使用sql语句,但一般还是hq ... -
Hibernate工作原理及使用理由
2012-04-08 13:31 01.读取并解析配置文件 2.读取并解析映射信息,创建Sess ... -
hibernate+sqlserver中文乱码的解决
2012-04-08 13:30 0首先要编写一个编码过滤器,起编码如下: pack ... -
spring + hibernate 二级缓存 ehcache
2012-04-08 13:28 01:配置spring 文件 在sessionfacti ... -
实现OSCache二级缓存的配置方案
2012-04-08 13:23 0我在这里以应用十分广泛的OSCache第三方缓存框架为例,谈谈 ... -
Hibernate事务处理机制----2
2012-04-08 13:20 919二、JTATransaction 如果你 ... -
Hibernate事务处理机制--1
2012-04-08 13:17 1030Hibernate是对JDBC的轻量级对象封装,Hiberna ...
相关推荐
Hibernate入门 OR映射技术 通过Hibernate API操纵数据库 检索策略和方式 数据库事务、并发、缓存与性能优化 高级配置
2. **入门**:详细介绍了编写第一个Hibernate程序的步骤,从创建Java类,到编写映射文件(例如,用于映射`Cat`类),再到配置Hibernate和执行基本的持久化操作,如加载和存储对象。 3. **体系结构**:讨论了...
**Java基础入门之Hibernate入门** Hibernate是一个开源的对象关系映射(ORM)框架,它为Java开发者提供了一种在关系数据库中存储和管理对象的便捷方式。在这个“Java基础入门之Hibernate入门”中,我们将深入理解...
Hibernate是一款强大的Java持久化框架,它简化了数据库与Java对象之间的交互,使开发者可以更加专注于业务逻辑而不是数据访问层的实现。本压缩包提供的是Hibernate入门所需的jar包,包括了Hibernate的核心库以及与之...
【Hibernate入门案例源码】是针对初学者设计的一份教程,旨在帮助理解并掌握Java持久化框架Hibernate的基础应用。Hibernate是一个强大的ORM(对象关系映射)框架,它简化了数据库与Java对象之间的交互,使开发者可以...
Hibernate是一款强大的Java持久化框架,它简化了数据库与Java对象之间的交互,使得开发者无需编写大量的SQL语句,就能实现数据的增删改查。本教程将分为五个部分,逐步深入Hibernate的世界。 **第一部分:Hibernate...
Hibernate是一个开源的对象关系映射(ORM)框架,它为Java开发者提供了方便的数据持久化服务。在Java应用中,通过Hibernate,开发者可以将数据库操作抽象成对象模型,使得代码更加简洁,同时减少了与SQL的直接交互,...
Hibernate 是一款流行的Java对象持久化技术,它提供了一种高效且便捷的方式来映射Java对象到关系数据库,使得开发人员可以避免直接使用SQL进行数据操作,从而提高开发效率。本教程适合初学者,内容丰富,涵盖...
- **ORM技术**:Hibernate实现了对象关系映射(Object-Relational Mapping,简称ORM)技术,其核心在于将Java对象自动持久化到关系数据库中。这一过程极大地简化了数据的存储和检索,允许开发者以面向对象的方式操作...
我自己做的一个Java持久化框架 可以给hibernate入门者看一下,其中有hibernate的思想和iBatis的思想,如果你只是一个网站开发者那么这一套框架将加快你的开发速度。如果你是一个开发者,那么你可以很好的研究其中的...
《Hibernate—Java对象持久化技术-Hibernate入门.ppt》适合初学者,涵盖了Hibernate的基本概念、配置和基本操作。而《Hibernate—Java对象持久化技术-Hibernate进阶.ppt》则深入讲解了高级特性和最佳实践,如缓存...
【hibernate入门小例子】是一个适合初学者的教程,主要涵盖了如何在JavaWeb项目中使用Hibernate框架与MySQL数据库进行集成。在这个例子中,我们将会深入理解Hibernate的核心概念,包括实体映射、对象关系映射(ORM)...
Hibernate中的一个关键概念是持久化类,这是一个包含标识属性的Java类,标识属性通常是一个唯一标识对象的字段,比如一个ID。在Hibernate中,每个持久化类都应至少有一个标识属性,Hibernate通过这个属性来追踪对象...
HIBERNATE - 符合Java习惯的关系数据库持久化 Hibernate参考文档 3.2 -------------------------------------------------------------------------------- 目录 前言 1. 翻译说明 2. 版权声明 1. Hibernate...
《Hibernate入门到精通》这本书是针对Java开发人员深入学习Hibernate框架的一份宝贵资源。Hibernate是一个开源的对象关系映射(ORM)框架,它极大地简化了Java应用程序与数据库之间的交互。通过使用Hibernate,...
JavaBean和XML在Java持久化中扮演着重要角色。JavaBean是一种符合特定规范的Java类,常用于封装业务逻辑和数据,而XML则是一种通用的数据交换格式,常用于配置文件和数据传输。 ### JavaBean JavaBean是一种遵循...
在Java开发中,Hibernate是一个非常重要的框架,它实现了对象关系映射(ORM)技术,使得开发者可以使用面向对象的方式来操作数据库,极大地简化了数据访问层的编程工作。本教程针对初学者,语言简洁易懂,旨在帮助...
Hibernate 是一个强大的Java持久化框架,它简化了数据库操作,使得开发者无需直接编写SQL语句即可实现对象与关系数据库之间的映射。这个文档将带你步入Hibernate的世界,了解其基本概念和核心功能。 ### 一、...