国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > Java > 正文

解析Java的Hibernate框架中的持久化類和映射文件

2019-11-26 14:45:44
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

持久化類
Hibernate的整個(gè)概念是采取從Java類屬性的值,并將持久到數(shù)據(jù)庫(kù)表。一個(gè)映射文件Hibernate的幫助確定如何從拉動(dòng)類的值,并將它們映射與表和相關(guān)的域。

其對(duì)象或?qū)嵗龑⒋鎯?chǔ)在數(shù)據(jù)庫(kù)表中的Java類在Hibernate中稱為持久化類。 Hibernate的效果最好,如果這些類遵循一些簡(jiǎn)單的規(guī)則,也稱為普通Java對(duì)象(POJO)編程模型。有下列持久化類的主要規(guī)則,但是,這些規(guī)則并不是必需的。

將所有的持久化Java類需要一個(gè)默認(rèn)的構(gòu)造函數(shù)。

所有類應(yīng)該包含為了讓容易識(shí)別對(duì)象內(nèi)Hibernate和數(shù)據(jù)庫(kù)的ID。此屬性映射到數(shù)據(jù)庫(kù)表的主鍵列。

所有屬性將被持久化應(yīng)該聲明為private,并已在JavaBean風(fēng)格的定義的getXXX和setXXX方法。

Hibernate的關(guān)鍵功能,代理,取決于持久化類或者是非final的,或者說(shuō)聲明的所有公共方法的接口的實(shí)現(xiàn)。

所有的類不擴(kuò)展或?qū)崿F(xiàn)的EJB框架需要進(jìn)行一些專門的類和接口。

POJO名稱用于強(qiáng)調(diào)一個(gè)給定的對(duì)象是一個(gè)普通的Java對(duì)象,而不是一個(gè)特殊的對(duì)象,好更不是Enterprise JavaBean。

一個(gè)簡(jiǎn)單的POJO例子:
基于上面提到的一些規(guī)則,我們可以如下定義一個(gè)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;  }}


映射文件
對(duì)象/關(guān)系映射的XML文檔中通常被定義。這個(gè)映射文件指示Hibernate如何定義的一個(gè)或多個(gè)類映射到數(shù)據(jù)庫(kù)表。

雖然很多Hibernate用戶選擇手工編寫XML中,有一些工具可以用來(lái)生成映射文檔。包括XDoclet,Middlegen和AndroMDA等用于高級(jí)Hibernate的用戶。

讓我們考慮我們的對(duì)象將堅(jiān)持在下一節(jié)中定義的表前面定義的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;  }}

會(huì)有一個(gè)表對(duì)應(yīng)于每一個(gè)對(duì)象,你愿意提供持久性。考慮上述目的需要存儲(chǔ)和檢索到下面的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));

基于以上兩個(gè)實(shí)體,我們可以定義它指示Hibernate如何定義的一個(gè)或多個(gè)類映射到數(shù)據(jù)庫(kù)表下面的映射文件。

<?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。來(lái)看看關(guān)于在映射文件中使用的映射元素的小細(xì)節(jié):

映射文檔是具有<hibernate-mapping>為包含所有的<class>元素的根元素的XML文檔。

在<class>元素被用于定義數(shù)據(jù)庫(kù)表從一個(gè)Java類特定的映射。 Java類名指定使用class元素的name屬性和使用表屬性數(shù)據(jù)庫(kù)表名指定。

<meta>元素是可選元素,可以用來(lái)創(chuàng)建類的描述。

<id>元素映射在類中的唯一ID屬性到數(shù)據(jù)庫(kù)表的主鍵。 id元素的name屬性是指屬性的類和column屬性是指在數(shù)據(jù)庫(kù)表中的列。 type屬性保存了Hibernate映射類型,這種類型的映射將會(huì)從Java轉(zhuǎn)換為SQL數(shù)據(jù)類型。

id元素內(nèi)的<generator>元素被用來(lái)自動(dòng)生成的主鍵值。將生成元素的class屬性設(shè)置為原生讓Hibernate拿起無(wú)論是identity,sequence或者h(yuǎn)ilo中的算法來(lái)創(chuàng)建主鍵根據(jù)底層數(shù)據(jù)庫(kù)的支持能力。

<property>元素用于一個(gè)Java類的屬性映射到數(shù)據(jù)庫(kù)表中的列。元素的name屬性是指屬性的類和column屬性是指在數(shù)據(jù)庫(kù)表中的列。 type屬性保存了Hibernate映射類型,這種類型的映射將會(huì)從Java轉(zhuǎn)換為SQL數(shù)據(jù)類型。

還有這將在映射文件中使用,接下來(lái)盡量覆蓋盡可能多其他的Hibernate相關(guān)主題的其他屬性和可用的元素。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 凤冈县| 方正县| 敦煌市| 个旧市| 拜泉县| 珲春市| 巴林右旗| 仁布县| 荃湾区| 湟中县| 扶风县| 华亭县| 芦山县| 临沂市| 东辽县| 黑河市| 齐河县| 阜康市| 攀枝花市| 湖州市| 桐梓县| 左贡县| 黄陵县| 疏附县| 临潭县| 潍坊市| 灵宝市| 林甸县| 喀喇| 团风县| 太仓市| 平山县| 沙坪坝区| 儋州市| 广宗县| 罗源县| 桂阳县| 济源市| 凤山市| 屯门区| 临澧县|