Hibernate的源码编译为eclipse项目后,下一步就开始源码的学习了,但应该从哪一块的源码看起,也没有一个确定的方案,暂时准备结合Hibernate的教程中的章节进行源码的阅读。
初步方案是根据Hibernate的手册,按照介绍的章节查看对应的源码,分析核心部分的源码,并结合Hibernate开发向导中的内容,深入理解背后的原理,第一步从hibernate的配置文件的加载和解析相关的代码读起。
在源码学习之前,首先介绍一下Hibernate中自带的文档,应该说这是学习Hibernate最权威也最全面的资料了,下载Hbiernate后解压,在根目录的documentation文件夹中,可以看到四个子目录,分别包含Hibernate的四份文档。除了Hibernate的Javadoc之外,其他三份都是帮助理解和使用Hibernate的,只是各有侧重。
(1)quickstart的篇幅最少,主要介绍Hibernate的核心部分的使用教程,以及一些示例。
(2)manual的内容最多,也最全面的,包含了Hibernate的原理和使用的方方面面。
(3)devguide是开发者向导手册,侧重于介绍实际开发中所涉及到的方面,以开发中使用Hibernate的不同方面为主题,介绍了数据库访问、事务控制、持久化上下文、锁、缓存、服务等内容。
美中不足的是,最新版本中自带的文档全部是英文的。当前Hibernate官方网站上,中文版的文档更新到了Hibernate3.6,但是也只有核心手册有,其他的还都只有英文版,具体的下载地址为http://hibernate.org/docs,可根据自己所需要的版本下载对应的文档。
因为下载的是最新的代码,因此,结合的也是最新的文档,最新版本的Hibernate是8月28号刚刚发布的Hibernate4.2.5最终版。
下载地址:
http://downloads.sourceforge.net/project/hibernate/hibernate4/4.2.5.Final/hibernate-release-4.2.5.Final.zip
好,言归正传,现在开始源码学习,本节主要学习一下Hibernate映射文件相关的知识。
Hibernate之所以能够知道如何加载和存储一个持久化类的对象,是因为Hibernate的映射文件在其作用;即.hbm文件。映射文件会告诉Hibernate它将要访问的是数据库的那个表,会用到哪些表字段。
Hibernate映射文件有一份对应的DTD文件用于规范.hbm的元素及其内容,具体的DTD的地址为:http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd
下载该文件后打开,发现其一共有1069行之多,其中详细规定了映射文件中的每个元素,及其元素所包含的值的类型,范围等,关于DTD的相关知识可以参考:
中文:http://www.w3school.com.cn/dtd/
英文:http://en.wikipedia.org/wiki/Document_Type_Definition
参照hbm文件的DTD来看一下hbm文件的组成结构:
参看DTD可知,hbm文件的根节点为hibernate-mapping,其结构应该包含的子节点如下:
meta*,
identifier-generator*,
typedef*,
filter-def*,
import*,
(class|subclass|joined-subclass|union-subclass)*,
resultset*,
(query|sql-query)*,
filter-def*,
fetch-profile*,
database-object*
)>
主要包含元数据,id生成器、类型定义等。
meta元素被用来分配元数据级别的属性给一个类或属性,当前被代码生成器用作那些与对象映射没有直接关联的值的占位符。
identifier-generator元素允许自定义的id生成器实现的短命名。包含name和class两个必须的子元素,默认为空。
class元素规定了该hbm文件所对应的映射类,其组成元素如下:
<!ELEMENT class (
meta*,
subselect?,
cache?,
synchronize*,
comment?,
tuplizer*,
(id|composite-id),
discriminator?,
natural-id?,
(version|timestamp)?,
(property|many-to-one|one-to-one|component|dynamic-component|properties|any|map|set|list|bag|idbag|array|primitive-array)*,
((join*,subclass*)|joined-subclass*|union-subclass*),
loader?,sql-insert?,sql-update?,sql-delete?,
filter*,
fetch-profile*,
resultset*,
(query|sql-query)*
)>
包含的属性列表,仅列出了常用的几个属性
<!ATTLIST class entity-name CDATA #IMPLIED>
<!ATTLIST class name CDATA #IMPLIED> <!-- this is the class name -->
<!ATTLIST class table CDATA #IMPLIED> <!-- default: unqualified classname -->
<!ATTLIST class schema CDATA #IMPLIED> <!-- default: none -->
<!ATTLIST class catalog CDATA #IMPLIED> <!-- default: none -->
<!ATTLIST class dynamic-update (true|false) "false">
<!ATTLIST class dynamic-insert (true|false) "false">
<!ATTLIST class batch-size CDATA #IMPLIED>
其中比较重要的属性有name和table,name是对应的类名,table是对应的数据表名称。
另一个比较常见的子节点应该是property,其结构如下,此处也仅保留几个常用的属性
<!ELEMENT property (meta*,(column|formula)*,type?)>
<!ATTLIST property name CDATA #REQUIRED>
<!ATTLIST property type CDATA #IMPLIED>
<!ATTLIST property column CDATA #IMPLIED>
<!ATTLIST property length CDATA #IMPLIED>
<!ATTLIST property precision CDATA #IMPLIED>
<!ATTLIST property scale CDATA #IMPLIED>
<!ATTLIST property not-null (true|false) #IMPLIED>
此外,规定主键的的主要属性如下,参加id的注释可知,这个节点用于定义主键的类型、对应的数据列名称已经其值的生成算法,如果为这个id定义了一个name属性,这个id通过class对应name的属性暴露给应用程序,否则,这个id仅能通过Session.getIdentifier()来暴露给应用程序
<!ELEMENT id (meta*,column*,type?,generator?)>
<!ATTLIST id name CDATA #IMPLIED>
<!ATTLIST id column CDATA #IMPLIED>
<!ATTLIST id type CDATA #IMPLIED>
<!ATTLIST id length CDATA #IMPLIED>
Hibernate映射文件相关代码的包为org.hibernate.mapping。该包中包含11个接口和48个类和一个枚举定义。包含了所有数据库表关系映射所需的对象,如主键、外键、表连接、索引、一对一、多对一,以及一些数据库辅助功能的映射,例如触发器和存储过程。唯一的枚举MetadataSource用于规定映射的数据来源,包含三个值:HBM、ANNOTATIONS、OTHER,即hbm文件、注解和其他。而对于主键的id生成,相关的代码则在org.hibernate.id包中,下一篇笔记将深入看一下这两个包中与hbm相关的主要类的核心代码。
相关推荐
【hibernate_first_new项目源码】是一个关于Hibernate框架学习的项目,主要涵盖了对Hibernate常用接口的详细讲解和实例应用。Hibernate是一个强大的Java持久层框架,它为开发者提供了对象关系映射(ORM)功能,使得...
4. **映射文件**:如果不想使用注解,可以使用XML文件(如`Student.hbm.xml`)来描述对象关系映射。 5. **关联管理**:在上述关系中,`Student`可能有多个`Course`,每个`Course`又可以有多个`Score`。Hibernate...
配置继承映射时,需要在Hibernate的映射文件(.hbm.xml)中指定继承类型。对于"Table Per Class",可以使用`<class>`元素的`table-per-hierarchy`属性,如下所示: ```xml <hibernate-mapping> ...
【压缩包子文件的文件名称列表】:“hibernate映射文件自动生成.doc”很可能是这篇博文的文档形式,其中详细介绍了具体的操作步骤、使用工具或者自定义脚本,以帮助开发者理解并应用自动化的映射文件生成过程。...
6. **映射文件(.hbm.xml)**:传统方式下,实体类和数据库表的映射信息会被写入XML文件,现代做法多采用注解方式。 7. **持久化操作**:包括CRUD(Create, Read, Update, Delete)操作,如Session的save()、get()...
Hibernate通过XML映射文件(如`*.hbm.xml`)或注解将Java类与数据库表关联。映射文件描述了类的属性如何对应到数据库的字段,以及主键、外键、索引等关系。在源码中,我们可以找到实体类(Entity class)和对应的...
4. **配置XML映射文件**:如果不使用注解,可以在.hbm.xml文件中定义映射,使用标签来配置一对一关系。 5. **持久化操作**:使用SessionFactory创建Session,通过Session进行CRUD(创建、读取、更新、删除)操作。...
**hibernate源码分析:启动过程** 在深入探讨Hibernate启动过程之前,首先需要了解Hibernate是什么。Hibernate是一个开源的对象关系映射(ORM)框架,它为Java开发人员提供了一种在Java应用程序中操作数据库的方式...
学习这个项目,开发者可以深入理解如何在实际项目中整合Struts和Hibernate,如何设计Action类处理用户请求,如何配置Struts的配置文件(struts.xml),以及如何定义Hibernate的实体类和映射文件(hbm.xml)。同时,还能...
4. **持久化类和映射文件**:持久化类是代表数据库表的Java类,通过注解或XML映射文件(hbm.xml)与数据库表建立映射关系。注解方式更简洁,而XML方式提供了更多自定义选项。 5. **HQL(Hibernate Query Language)...
3. 映射文件:.hbm.xml文件或注解方式,将对象模型与数据库表进行映射。 4. 数据库操作:增删改查(CRUD)操作,使用HQL或Criteria API。 5. 关联映射:一对一(OneToOne)、一对多(OneToMany)、多对一(ManyToOne...
3. `*.hbm.xml`:Hibernate的映射文件,定义了实体类与数据库表的关系。 4. `*.java`:Action、ActionForm、实体类、DAO和业务逻辑类的源代码。 5. `jsp`文件:视图部分,展示数据和用户交互界面。 6. 可能还包括...
通过分析这些源码,你可以更好地理解Hibernate在实际项目中的应用,如如何配置实体类、如何编写映射文件、如何使用Session进行数据操作,以及事务处理的实现等。 学习Hibernate的过程中,结合文档和源码进行实践是...
5. **源码实践:** 学习者可以通过下载提供的源码,查看实体类的定义、映射文件(如.hbm.xml或使用注解的方式)以及相关的DAO和Service层代码,了解如何在实际项目中设置和使用一对一单向主键关联。 6. **例子分析...
在深入探讨Hibernate源码之前,我们首先需要理解什么是对象持久化技术。对象持久化是将内存中的对象状态保存到持久存储介质(如数据库)中,以便在后续的程序运行中可以恢复这些对象的状态。它解决了应用程序中的...
在Java世界中,ORM(对象关系映射)框架如Hibernate极大地简化了数据库操作。本教程主要探讨的是Hibernate中的一种重要关系映射类型:一对多单向关联。在关系型数据库中,一对多关联是最常见的关系类型,一个实体...
源码中包含了大量的映射文件(`.hbm.xml`),它们定义了对象与数据库表之间的对应关系。 2. **Session接口**:在Hibernate中,`Session`是与数据库交互的主要接口。它负责保存、更新、删除对象,并执行SQL查询。...
实体的映射文件(*.hbm.xml)或者注解定义了对象与数据库表的对应关系。 以上就是Hibernate核心开发接口的简要介绍。在实际开发中,通过熟练掌握这些接口和概念,我们可以高效地利用Hibernate进行数据库操作,降低...
3. Hibernate配置:学习如何设置Hibernate的配置文件(hibernate.cfg.xml),包括数据库连接、实体类的映射等。 4. Session API:理解Session对象的作用,如何创建、保存、更新和删除数据。 5. Criteria查询和HQL:...
标题中的“用Hibernate自带的工具生成映射文件”指的是使用Hibernate框架提供的元数据生成工具,这个工具可以帮助开发者自动生成Hibernate所需的映射文件(一般为.hbm.xml文件),这些映射文件是ORM(对象关系映射)...