一個對象/關(guān)系型映射一般定義在 XML 文件中。映射文件指示 Hibernate 如何將已經(jīng)定義的類或類組與數(shù)據(jù)庫中的表對應起來。
盡管有些 Hibernate 用戶選擇手寫 XML 文件,但是有很多工具可以用來給先進的 Hibernate 用戶生成映射文件。這樣的工具包括 XDoclet, Middlegen 和 AndroMDA。
讓我們來考慮我們之前定義的 POJO 類,它的對象將延續(xù)到下一部分定義的表中。
public class Employee {
private int id;
private String firstName;
private String lastName;
private int salary;
public Employee() {}
public Employee(String fname, String lname, int salary) {
this.firstName = fname;
this.lastName = lname;
this.salary = salary;
}
public int getId() {
return id;
}
public void setId( int id ) {
this.id = id;
}
public String getFirstName() {
return firstName;
}
public void setFirstName( String first_name ) {
this.firstName = first_name;
}
public String getLastName() {
return lastName;
}
public void setLastName( String last_name ) {
this.lastName = last_name;
}
public int getSalary() {
return salary;
}
public void setSalary( int salary ) {
this.salary = salary;
}
}
對于每一個你想要提供持久性的對象都需要一個表與之保持一致??紤]上述對象需要存儲和檢索到下列 RDBMS 表中:
create table EMPLOYEE (
id INT NOT NULL auto_increment,
first_name VARCHAR(20) default NULL,
last_name VARCHAR(20) default NULL,
salary INT default NULL,
PRIMARY KEY (id)
);
基于這兩個實體之上,我們可以定義下列映射文件來指示 Hibernate 如何將已定義的類或類組與數(shù)據(jù)庫表匹配。
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="Employee" table="EMPLOYEE">
<meta attribute="class-description">
This class contains the employee detail.
</meta>
<id name="id" type="int" column="id">
<generator class="native"/>
</id>
<property name="firstName" column="first_name" type="string"/>
<property name="lastName" column="last_name" type="string"/>
<property name="salary" column="salary" type="int"/>
</class>
</hibernate-mapping>
你需要以格式 <classname>.hbm.xml
保存映射文件。我們保存映射文件在 Employee.hbm.xml 中。讓我們來詳細地看一下在映射文件中使用的一些標簽:
<hibernate-mapping>
為根元素的 XML 文件,里面包含所有<class>
標簽。<class>
標簽是用來定義從一個 Java 類到數(shù)據(jù)庫表的特定映射。Java 的類名使用 name 屬性來表示,數(shù)據(jù)庫表明用 table 屬性來表示。<meta>
標簽是一個可選元素,可以被用來修飾類。<id>
標簽將類中獨一無二的 ID 屬性與數(shù)據(jù)庫表中的主鍵關(guān)聯(lián)起來。id 元素中的 name 屬性引用類的性質(zhì),column 屬性引用數(shù)據(jù)庫表名的列。type 屬性保存 Hibernate 映射的類型,這個類型會將從 Java 轉(zhuǎn)換成 SQL 數(shù)據(jù)類型。<generator>
標簽用來自動生成主鍵值。設(shè)置 generator 標簽中的 class 屬性可以設(shè)置 native 使 Hibernate 可以使用 identity, sequence 或 hilo 算法根據(jù)底層數(shù)據(jù)庫的情況來創(chuàng)建主鍵。<property>
標簽用來將 Java 類的屬性與數(shù)據(jù)庫表的列匹配。標簽中 name 屬性引用的是類的性質(zhì),column 屬性引用的是數(shù)據(jù)庫表的列。type 屬性保存 Hibernate 映射的類型,這個類型會將從 Java 轉(zhuǎn)換成 SQL 數(shù)據(jù)類型。還有一些其它屬性和元素可用在映射文件中,我會在其它討論 Hibernate 相關(guān)的主題中盡可能得涉及更多。
更多建議: