Hibernate 映射文件
hibernate 映射文件
一个对象/关系型映射一般定义在 xml 文件中。映射文件指示 hibernate 如何将已经定义的类或类组与数据库中的表对应起来。
尽管有些 hibernate 用户选择手写 xml 文件,但是有很多工具可以用来给先进的 hibernate 用户生成映射文件。这样的工具包括 xdoclet
, middlegen
和 andromda
。
让我们来考虑我们之前定义的 pojo 类,它的对象将延续到下一部分定义的表中。
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 如何将已定义的类或类组与数据库表匹配。
<?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 类到数据库表的特定映射。java 的类名使用name
属性来表示,数据库表明用table
属性来表示。<meta>
标签是一个可选元素,可以被用来修饰类。<id>
标签将类中独一无二的id
属性与数据库表中的主键关联起来。id
元素中的name
属性引用类的性质,column
属性引用数据库表的列。type
属性保存 hibernate 映射的类型,这个类型会将从 java 转换成 sql 数据类型。- 在
id
元素中的<generator>
标签用来自动生成主键值。设置generator
标签中的class
属性可以设置native
使 hibernate 可以使用identity
,sequence
或hilo
算法根据底层数据库的情况来创建主键。 <property>
标签用来将 java 类的属性与数据库表的列匹配。标签中name
属性引用的是类的性质,column
属性引用的是数据库表的列。type
属性保存 hibernate 映射的类型,这个类型会将从 java 转换成 sql 数据类型。
还有一些其它属性和元素可用在映射文件中,我会在其它讨论 hibernate 相关的主题中尽可能得涉及更多。