更新時間:2022-11-21 09:22:46 來源:動力節點 瀏覽862次
首先,您必須確保您使用的是 JDK 5.0,否則您需要將 JDK 升級到 JDK 5.0 才能利用對注釋的本機支持。
其次,您需要安裝 Hibernate 3.x 注釋分發包,可從 sourceforge 獲得:(下載 Hibernate Annotation)并復制hibernate-annotations.jar、lib/hibernate-comons-annotations.jar和lib/ejb3-persistence。 jar從 Hibernate Annotations 分發到你的 CLASSPATH。
正如我在上面使用 Hibernate Annotation 時提到的,所有元數據都與代碼一起合并到 POJO java 文件中,這有助于用戶在開發過程中同時理解表結構和 POJO。
考慮我們將使用以下 EMPLOYEE 表來存儲我們的對象
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)
);
以下是帶有注釋的 Employee 類的映射,以將對象映射到已定義的 EMPLOYEE 表 -
import javax.persistence.*;
@Entity
@Table(name = "EMPLOYEE")
public class Employee {
@Id @GeneratedValue
@Column(name = "id")
private int id;
@Column(name = "first_name")
private String firstName;
@Column(name = "last_name")
private String lastName;
@Column(name = "salary")
private int salary;
public Employee() {}
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;
}
}
Hibernate 檢測到 @Id 注釋在字段上,并假定它應該在運行時直接通過字段訪問對象的屬性。如果將 @Id 注釋放在 getId() 方法上,則默認情況下可以通過 getter 和 setter 方法訪問屬性。因此,所有其他注釋也按照選定的策略放置在字段或 getter 方法上。
以下部分將解釋上述類中使用的注釋。
EJB 3 標準注解包含在javax.persistence包中,所以我們導入這個包作為第一步。其次,我們對 Employee 類使用了@Entity注解,它將這個類標記為一個實體 bean,因此它必須有一個至少在受保護范圍內可見的無參數構造函數。
@Table 注釋允許您指定將用于將實體保存在數據庫中的表的詳細信息。
@Table 注釋提供了四個屬性,允許您覆蓋表的名稱、它的目錄和它的模式,并對表中的列強制執行唯一約束。現在,我們只使用表名,即 EMPLOYEE。
每個實體 bean 都有一個主鍵,您可以使用@Id注釋在類上對其進行注釋。主鍵可以是單個字段或多個字段的組合,具體取決于您的表結構。
默認情況下,@Id 注釋將自動確定要使用的最合適的主鍵生成策略,但您可以通過應用@GeneratedValue注釋來覆蓋它,它采用我不打算在這里討論的兩個參數策略和生成器,所以讓我們只使用默認的密鑰生成策略。讓 Hibernate 確定要使用的生成器類型使您的代碼可以在不同數據庫之間移植。
@Column 注釋用于指定字段或屬性將映射到的列的詳細信息。您可以使用具有以下最常用屬性的列注釋 -
name屬性允許顯式指定列的名稱。
length屬性允許用于映射值的列的大小,特別是對于 String 值。
nullable屬性允許在生成模式時將列標記為 NOT NULL。
unique屬性允許將列標記為僅包含唯一值。
0基礎 0學費 15天面授
有基礎 直達就業
業余時間 高薪轉行
工作1~3年,加薪神器
工作3~5年,晉升架構
提交申請后,顧問老師會電話與您溝通安排學習