Hibernate 中將物件與資料庫表格映射關係連接起來的是映射文件,如果使用XML來定義,通常以*.hbm.xml作為檔案名稱,如果要使用Annotation直接定義在.java檔案之中,可以參考 Hibernate Annotations。 XML映射文件可以手工撰寫,或是透過工具程式從資料庫表格自動生 成,可以參考 從資 料表生成映射文件與POJO。 來看看一個基本的映射文件如何撰寫:
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <!--類別名稱與表格名稱映射--> <class name="onlyfun.caterpillar.User" table="user"> <!--id與主鍵映射--> <id name="id" column="id"> <generator class="native"/> </id> <!--類別屬性與表格欄位的映射--> <property name="name" column="name"/> <property name="age" column="age"/> </class> </hibernate-mapping> 映射文件中主要包括三個部份:類別名稱與表格名稱的映射、id屬性與主鍵的映射、類別屬性與表格欄位的映射。 這份映射文件對應於以下的類別與表格:
package onlyfun.caterpillar; public class User { private Integer id; private String name; private Integer age; // 必須要有一個預設的建構方法 // 以使得Hibernate可以使用Constructor.newInstance()建立物件 public User() {} public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } }
在<id>或<property>的設定上,name設定類別上的屬性名,而column對應至表格欄位,如果屬性名稱與欄位名稱相同,則可以省略column屬性設定。 <id>或<property>上,可以設定type屬性,在type上可以設定Java類別的資料 型態,但由於 Java的資料型態與資料庫的資料型態並不是一對一對應的,為此Hibernate提供它自己的資料型態,作為Java資料型態與資料庫資料型態的連接型 態,下面的表格列出型態之間的對應:
一個設定的方式如下所示: <property name="name" column="name" type="string"/>
每個內建的Hibernate類型,在 org.hibernate.Hibernate類別中都有對應的常數,例如Hibernate.STRING。基本上,Hibernate會使用 Reflection自動找出屬性的資料型態,所以type屬性在使用POJO時可以省略不設,如果有特別設定,則Hibernate就不用使用 Reflection來找出類型,不過在使用 動 態模型(Dynamic Model),type屬性則是必須設定的,用以得知動態模型中應放入哪種類型的物件。 <generator>設定主鍵的生成方式,可以設定"native"表示由Hibernate自動根據Dialect選擇 採用 identity、hilo、sequence等作為主鍵生成方式,也可以考慮採用uuid由Hibernate根據128位元UUID演算法(128- bit UUID algorithm)生成16進位制數值,並編碼為32位長度的字串,還有其它的主鍵生成方式,可以參考官方手冊的Generator 說明。 您可以在<hibernate-mapping>上設定package屬性,如此一來,文件中要設置類別名稱時,就不用寫出完整的package,例如:
<hibernate-mapping package="onlyfun.caterpillar">
<!--類別名稱與表格名稱映射--> <class name="User" table="user"> .... </class> </hibernate-mapping> 在使用HQL時,您可以只使用類別名稱來替代完整名稱: // 相當於寫"from onlyfun.caterpillar.User"
Query query = session.createQuery("from User");
這是Hibernate的auto-import功能,然而如果在不同的package下都有User類別,則Hibernate將無從得知是要使用哪個User類別,您可以在<hibernate-mapping>上設定auto-import屬性為false,關閉auto-import功能,並在HQL中撰寫完整的類別名稱。 另一種解決的方式,是在<hibernate-mapping>中使用<import>設定別名,例如:
<hibernate-mapping>
<import class="onlyfun.caterpillar.User" rename="DemoUser"/> </hibernate-mapping> 之後在指定HQL中,即可使用這個別名: Query query = session.createQuery("from DemoUser");
對於一些不能為空的屬性,可以在<property>上加上not-null屬性為true,如此Hibernate可以直接檢查屬性是否為null,而不用等進入到資料庫中再作檢查。 如果有某個屬性,其值取決於表格欄位自己產生的值,而非程式中主動設定的值,例如資料新增時,會由資料庫產生新增時的時間,而這個值想要主動提取至物件的對應屬性,則可以在<property>上設定generated屬性,例如:
...
<property name="time" column="time" insert="false" update="false" generated="always"/> ... 如上設定之後,當物件儲存時,time屬性並不會參與儲存,而是由資料庫產生time欄位值,再SELECT出來設定給time屬性,由於並非實際要儲存屬性,所以設定insert為false,而由於這個欄位由資料庫維護,所以update設定為false。 如果物件上有個屬性,實際上並沒有欄位與之對應,您只是想藉由資料庫中的欄位查詢來取得,例如使用COUNT函式來取得所有的筆數,則您可以使用formula屬性,例如:
...
<property name="average" formula="(SELECT AVG(u.age) FROM T_USER u)"/> |
- 浏览: 91087 次
- 性别:
- 来自: 北京
相关推荐
总结来说,“Hibernate 映射文件自动生成”是提升Java ORM开发效率的重要手段,通过理解和掌握这个功能,开发者可以更加专注于业务逻辑,而非繁琐的底层数据结构配置。而“hibernate映射文件自动生成.doc”文档则...
ORM的核心思想是通过创建一个映射文件或使用注解,将数据库的表与程序中的类关联起来,每个表对应一个类,表中的字段对应类的属性。这样,当我们在程序中操作对象时,实际上是在操作数据库中的数据,反之亦然。ORM...
而MyEclipse作为一款强大的Java集成开发环境,提供了对Hibernate的良好支持,包括自动生成Hibernate映射文件的功能。本文将详细介绍如何在MyEclipse中创建和使用Hibernate映射文件。 首先,理解Hibernate映射文件...
hibernate映射文件是Java开发中用于对象关系映射(ORM)的重要组成部分,它将数据库表与Java类之间的关系进行定义,使得开发者无需编写大量的SQL语句,就能实现对数据库的操作。`生成hibernate映射文件工具`是为了...
1. **对象关系映射**:Hibernate通过XML映射文件或注解,将数据库表与Java对象对应起来,实现了数据库操作的对象化,使得开发者可以像操作普通Java对象一样操作数据库记录。 2. **查询语言(HQL)**:Hibernate提供...
"hibernate-orm-master.zip"文件包含了Hibernate ORM的源码和其他相关资源,对于学习和研究Hibernate ORM的工作原理以及如何在实际项目中使用它,是非常宝贵的资料。 在Java应用程序中,数据存储通常依赖于关系型...
映射文件是Hibernate中的关键元素,它定义了Java实体类与数据库表之间的对应关系。本主题将深入探讨如何根据Java实体类自动生成Hibernate的映射文件,这对于不使用MyEclipse等集成开发环境的开发者来说尤其实用。 ...
《Hibernate各类映射文件与配置文件模板》是一个包含多种Hibernate映射和配置示例的压缩包,用于帮助开发者理解和使用Hibernate框架。Hibernate是Java领域的一个流行的对象关系映射(ORM)框架,它允许开发者用面向...
而MyEclipse作为一款集成开发环境,提供了对Hibernate的全面支持,包括自动生成Hibernate的映射文件。这个功能使得开发者能够快速地将数据库表结构转化为Java实体类和对应的配置文件,大大提高了开发效率。 1. **...
"HibernateORM"这个文件名可能是包含示例代码、配置文件或教程文档的压缩包,可能包含以下内容: 1. Java实体类文件,展示了如何使用注解声明一对一关联。 2. Hibernate配置文件,显示了数据库连接和映射配置。 3. ...
《Hibernate ORM》是由李晓军等作者编著的书籍,主要涵盖了使用Hibernate进行对象关系映射(ORM)的最佳实践。Hibernate作为Java领域广泛使用的ORM框架,它极大地简化了数据库操作,将面向对象的编程思想与关系型...
每个需要持久化的Java类被称为实体类,通过在类上添加注解或使用XML映射文件(通常是`.hbm.xml`)来定义其与数据库表的对应关系。例如,`@Entity`注解表示这是个数据库中的表,`@Table`定义表名,`@Id`标识主键,`@...
3. 配置Hibernate:在Hibernate的配置文件(如`hibernate.cfg.xml`)中,添加映射文件路径,让Hibernate知道哪些映射文件需要被加载。 4. 使用工具或API生成数据库:有了映射文件,你可以使用Hibernate的`...
标题中的“用Hibernate自带的工具生成映射文件”指的是使用Hibernate框架提供的元数据生成工具,这个工具可以帮助开发者自动生成Hibernate所需的映射文件(一般为.hbm.xml文件),这些映射文件是ORM(对象关系映射)...
在Hibernate中,这种关系可以通过配置XML映射文件或使用注解来实现。我们先来看一下基本的概念: 1. **实体类**:在Java中,实体类代表数据库中的一个表,其属性对应于表的列。每个实体类通常对应一个唯一的数据库...
这个压缩包文件“HibernateORM”很可能包含了关于如何在实际项目中设置和使用Hibernate一对多双向关联的示例代码、配置文件或者详细教程。通过学习这些材料,开发者能够深入理解如何在Java应用中利用Hibernate来处理...
Myeclipse 自动生成 Hibernate 配置文件及实体类映射 ORM 配置文件 Myeclipse 是一个功能强大的集成开发环境(IDE),它提供了许多实用的功能来简化软件开发过程。在这个示例中,我们将展示如何使用 Myeclipse 自动...
Hibernate是一个流行的开源对象关系映射(ORM)框架,它允许开发者使用面向对象的编程语言(如Java)来处理数据库操作,从而减轻了数据库操作的复杂性。 在Hibernate ORM 4.0之前的版本中,构建SessionFactory的...
在使用Hibernate框架进行对象关系映射(ORM)时,MyEclipse提供了自动生成映射文件和实体类的功能,极大地简化了数据库与Java类之间的绑定工作。以下是详细步骤和相关知识点: 1. **DB Browser视图**:在MyEclipse...