`
hongsoft
  • 浏览: 302422 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Hibernate O/R映射三大基本定则

阅读更多
?

Hibernate O/R映射三大基本定则

1.?? 引言

Java环境下,有多种对象关系映射方法,如实体Bean、OJB、JDO、JDBC等。Hibernate是一种新的O/R映射工具,它不仅提供了从Java类到数据表的映射,也提供了数据查询和恢复等机制。Hibernate非常简单易学,目前国内有很多同行已经或正在用Hibernate开发实施项目;但Hibernate有很多规则不为人知或应用甚少。本文的目的就是将这些规则归纳总结,希望对您的开发和设计有益。<!----><o:p></o:p>

首先声明,本文是Hibernate入门级文章,高手请不用往下看了。

2.?? 基本定则

定则一:数据库配置文件名称可以不是Hibernate.properties或Hibernate.cfg.xml<o:p></o:p>

由于Hibernate官方文档(本文指www.hibernate.org的文档)的影响,很多Hibernate开发者误以为系统一定要有名称为Hibernate.properties或Hibernate.cfg.xml的文件,而且一定要放在classes的根目录下。实际上,该文件只是一般的配置文件,名称可以自己取,文件位置可以自己定,而且在多数据库环境下,可以有多个配置文件,使得程序可以连接多个数据库。只是您在创建会话工厂时需要特殊处理,代码示例如下:<o:p></o:p>

//配置文件名称<o:p></o:p>

protected static String CONFIG_FILE = "my_hibernate.config";<o:p></o:p>

//配置文件目录,可以考虑在该目录下存放系统所有配置文件,此处使用虚拟机参数<o:p></o:p>

String configPath = System.getProperty("my.config");? <o:p></o:p>

//创建会话工厂????? <o:p></o:p>

sessionFactory =( new Configuration().configure(new File(configPath+File.separator+CONFIG_FILE))) .buildSessionFactory();<o:p></o:p>

?<o:p></o:p>

?定则二:小型项目中,.hbm.xml文件可以合并到一个文件中<o:p></o:p>

同样由于Hibernate官方文档的影响,很多Hibernate开发者误以为Hibernate的对象关系映射一定要一个表对应一个对象,并将映射文件和对象文件放在同一目录下。实际上,该模式是为规范性考虑而设计的,因为在多人参与的项目中,多人要维护同一文件容易产生冲突;当项目比较小时,配置文件的维护人员少,我们完全可以将.hbm.xml文件合并到一个或者几个文件中。依据作者本人的项目设计开发经验,最好是项目中有几人同时从事O/R映射和持久工作,则设定几个.hbm.xml文件,每人维护一个。当然,为了便于分类和管理,每人的工作应该按逻辑划分。<o:p></o:p>

大型项目中的文件配置示例如下:<o:p></o:p>

<hibernate-configuration><o:p></o:p></hibernate-configuration>

<session-factory><o:p></o:p></session-factory>

<!----><o:p></o:p>

<mapping resource="com/hongsoft/test/ persistence/Cat.hbm.xml"><o:p></o:p></mapping>

<mapping resource="com/hongsoft/test/ persistence/Animal.hbm.xml"><o:p></o:p></mapping>

<o:p></o:p>

<o:p></o:p>

小型项目中的文件配置示例如下:<o:p></o:p>

<hibernate-configuration><o:p></o:p></hibernate-configuration>

<session-factory><o:p></o:p></session-factory>

<!----><o:p></o:p>

<mapping resource="res_hibernate_map.xml"><o:p></o:p></mapping>

<o:p></o:p>

<o:p></o:p>

要注意的是, 从对Hibernate源代码的分析可知,指定映射文件时,不能用绝对目录,只能用相对目录;而且,系统以classes根目录为当前目录。<o:p></o:p>

?<o:p></o:p>

定则三:对象关系映射是以.hbm.xml文件为基准的,而不是以PO文件为基准<o:p></o:p>

该定律的意思是:系统启动检查您的对象关系映射是否正确时,是以.hbm.xml为基准来进行检查的;对象文件的property可以比映射文件的property多,但不能少。如果您有如下的映射:<o:p></o:p>

<class name="com.hongsoft.test.User" table="res_user"><o:p></o:p></class>

??????? <id name="id" column="id" type="long" unsaved-value="any"><o:p></o:p></id>

??????????? <generator class="assigned">??????????????? <o:p></o:p></generator>

??????????? ? <o:p></o:p>

??????? <o:p></o:p>

??????? <property name="name">??? <o:p></o:p></property>

??????? <property name="loginName"><o:p></o:p></property>

??????? <property name="passwd">??????????????????? <o:p></o:p></property>

<o:p></o:p>

系统启动,检查数据库和其他配置正确后,将以该文件为基准,首先检查User对象中有无id属性和对应的get/set方法,如果没有则报错,如果有且正确则检查有无name属性和对应的get/set方法……,直到文件结束。要注意的是,如果属性为name,则get方法名称必须为getName(),set方法名称必须为setName(),否则会报错。<o:p></o:p>

如果User对象除了有id,name,loginName, passwd四个属性和对应的方法,还有其它的属性和方法,会报错吗?不会,因为对象关系映射是以.hbm.xml文件为基准的,而不是以PO文件为基准。您在项目中可以充分利用该特点,实现您自己的比较特殊的需求。例如,您可以在User对象中加入updatedPasswd表示更改后的口令,由此构造在表示层要使用的FormBean和在业务层要使用的ValueObject。当然,这样做也有缺点,需要根据您的实际情况而定。<o:p></o:p>

3.?? 总结

上面是作者对Hibernate映射的容易理解错误的知识点的归纳总结,希望对您有帮助。如果您发现有错误或有自己的观点,欢迎讨论。

?hongbo781202,又名HongSoft,职业程序员,研究领域:1)基于工作流的BPM系统研究2)基于JAVA的信息安全

技术.欢迎和大家讨论JAVA相关各方面技术和市场问题 hongbosoftware@163.com<o:p></o:p>

?<o:p></o:p>

?<o:p></o:p>

?<o:p></o:p>

分享到:
评论

相关推荐

    Hibernate O R映射三大基本定则

    以下是对Hibernate ORM映射三大基本定则的详细解释: 1. **数据库配置文件名称和位置的灵活性** Hibernate 并不强制要求数据库配置文件必须命名为`Hibernate.properties`或`Hibernate.cfg.xml`,也不限定文件必须...

    Hibernate O/R Mapping 入门工程包

    本入门工程包提供了使用XML和Annotation两种方式来实现Hibernate O/R Mapping的示例,旨在帮助初学者快速掌握其基本原理和实践方法。 首先,让我们了解什么是O/R Mapping。O/R Mapping是将数据库中的表格记录映射为...

    hibernate如何用O/R Mapping框架来实现我们的数据层

    ### Hibernate与O/R Mapping框架详解 #### 一、O/R Mapping概述 O/R Mapping(Object-Relational Mapping)即对象关系映射,是一种程序技术,用于将对象模型表示的应用程序对象与关系数据库中的表进行相互转换。在...

    hibernate框架学习,由浅入深

    Hibernate 是一个开源的对象关系映射(O/R)工具,用于解决 Java 应用程序中的数据访问问题。它提供了一种实现 O/R 映射的框架,管理该项目的组织是 JBoss。 2. Hibernate 的历史 Hibernate 诞生于 2001 年 11 月...

    泛型、反射 实现 O/R mapping 示例

    在Java编程语言中,O/R Mapping(对象关系映射)是一种技术,用于将数据库中的关系数据映射到对象模型上,使得开发人员可以更方便地处理数据,而无需直接操作SQL语句。在这个示例中,我们将探讨如何利用泛型和反射来...

    Wormhole:J2EE的自动和实时O / R映射框架-开源

    在传统的O/R映射框架中,如Hibernate或MyBatis,开发人员通常需要创建Plain Old Java Objects (POJOs) 并手动维护XML映射文件来定义对象与表之间的关系。然而,Wormhole框架消除了这个需求。它允许开发人员直接使用...

    一個好好的 hibernate 介紹

    例如,在不使用 O/R 映射的情况下新增一个用户账户时,需要编写 SQL 插入语句并处理相关的事务管理等,这是一项冗长且繁琐的工作,消耗大量的开发时间和人力成本。 - **解决方案**: - 使用面向对象的数据库代替...

    对象-关系映射—Hibernate 培训 (中文)

    对象-关系映射—Hibernate 培训 (中文) 目录 一、持久化层-O/R Mapping ...三、Hibernate映射申明(Mapping declaration) 四、持久化对象的状态和生命周期 五、Hibernate查询 六、Hibernate最佳实践

    深入浅出Hibernate中文版 part1

    4.3 Hibernate O/R映射 4.4 数据关联 4.5 Hibernate数据检索 4.6 HQL实用技术 4.7 自定义持久化实现 第5章 Hibernate高级特性 5.1 Hibernate持久化实现 5.2 Hibernate回调与拦截机制 5.3 Hibernate实用技术 ...

    深入浅出hibernate(PDF)第三部分

    直至Hibernate实战,重点讲述了Hibernate的基础语法、基础配置、O/R映射、数据关联、数据检索、HQL实用技术、自定义持久化实现、Hibernate回调与拦截、Hibernate分页等实用技术,Hibernate实战部分则用一个真实论坛...

    hibernate培训ppt

    【hibernate培训ppt】这份53页的资料主要涵盖了对象/关系映射(O/R Mapping)的概念,以及Hibernate框架的入门、映射声明、对象状态与生命周期、查询及最佳实践等内容。对于有一定Java、SQL和JDBC基础,且熟悉面向...

    Hibernate3 学习笔记.ppt

    Hibernate是一个开源的、成熟且广泛使用的O/R Mapping框架,它提供了一整套对象和关系数据库的映射以及查询机制。Hibernate的优势在于其开源性质、成熟度、社区支持以及自定义API。使用Hibernate,开发者可以遵循...

    深入浅出Hibernate

    本书内容深入浅出,先讲述持久层设计与ORM,再由Hibernate概述、Hibernate基础Hibernate高级特性顺序展开,直至Hibernate实战,重点讲述了 Hibernate的基础语法、基础配置、O/R映射、数据关联、数据检索、HQL实用...

    Hibernate完整使用教程

    Hibernate 的主要特点是将对象关系映射(O/R Mapping)技术应用于关系数据库,实现了对象到关系数据库的无缝集成。 为什么选择 Hibernate Hibernate 的出现是为了解决传统的 JDBC 编程中的问题。传统的 JDBC 编程...

    Hibernate数据库访问

    在Java开发领域,Hibernate是一个非常重要的对象关系映射(ORM)框架,它极大地简化了数据库操作,使得开发者可以使用面向对象的方式来处理数据,而无需过多关注底层的SQL语句。本章节将深入探讨Hibernate的基础知识...

    深入浅出Hibernate中文版 part2

    4.3 Hibernate O/R映射 4.4 数据关联 4.5 Hibernate数据检索 4.6 HQL实用技术 4.7 自定义持久化实现 第5章 Hibernate高级特性 5.1 Hibernate持久化实现 5.2 Hibernate回调与拦截机制 5.3 Hibernate实用技术 ...

    深入浅出Hibernate(PDF)第一部分

    直至Hibernate实战,重点讲述了Hibernate的基础语法、基础配置、O/R映射、数据关联、数据检索、HQL实用技术、自定义持久化实现、Hibernate回调与拦截、Hibernate分页等实用技术,Hibernate实战部分则用一个真实论坛...

    Hibernate笔记 马士兵

    二、常用的O/R映射框架: 13 第10课 模拟Hibernate原理(OR模拟) 13 一、 项目名称 13 二、 原代码 13 第11课 Hibernate基础配置 15 一、 提纲 15 二、 介绍MYSQL的图形化客户端 16 三、 Hibernate.cfg.xml:hbm2ddl....

Global site tag (gtag.js) - Google Analytics