在上一篇博客中,我們通過xml配置文件進行實體類和表的映射,但是近兩年來有更多的項目對一些比較穩定的實體類使用了註解進行ORM映射,這樣使得編程更加簡潔、簡單。其實使用註解進行ORM映射和使用xml進行映射沒有太多的操作流程上的變化,主要步驟為:導包、編寫帶註解的實體類、編寫核心配置文件、編寫測試類 ...
在上一篇博客中,我們通過xml配置文件進行實體類和表的映射,但是近兩年來有更多的項目對一些比較穩定的實體類使用了註解進行ORM映射,這樣使得編程更加簡潔、簡單。其實使用註解進行ORM映射和使用xml進行映射沒有太多的操作流程上的變化,主要步驟為:導包、編寫帶註解的實體類、編寫核心配置文件、編寫測試類。
項目工程代碼已經上傳到GitHub:https://github.com/wanyouxian/Hibernate 工程名:HibernateUseAnnotation
整個工程項目結構如下圖:
一、導包
筆者使用的是MySQL資料庫,因此導入數據包如下圖:
二、編寫實體類
用於映射的註解基本都在javax.persistence.*包中定義,我常用到的主要是如下四個:
@Entity註釋將此類標記為實體。 @Table註釋指定要保留此實體的數據的表名。 如果不使用@Table註釋,hibernate將使用類名作為表名稱bydefault。 @Id註釋標記此實體的標識符。 @Column註釋指定此屬性或欄位的列的詳細信息。如果未指定@Column註釋,則屬性名稱將用作列名稱bydefault。1 package com.rocky.domain; 2 3 import javax.persistence.Entity; 4 import javax.persistence.Id; 5 import javax.persistence.Table; 6 7 @Entity 8 @Table(name = "tb_user") 9 public class User 10 { 11 @Id 12 private Integer uId; 13 private String uName; 14 private Integer uAge; 15 public User() 16 { 17 super(); 18 } 19 @Override 20 public String toString() 21 { 22 return "User [uId=" + uId + ", uName=" + uName + ", uAge=" + uAge + "]"; 23 } 24 public Integer getuId() 25 { 26 return uId; 27 } 28 public void setuId(Integer uId) 29 { 30 this.uId = uId; 31 } 32 public String getuName() 33 { 34 return uName; 35 } 36 public void setuName(String uName) 37 { 38 this.uName = uName; 39 } 40 public Integer getuAge() 41 { 42 return uAge; 43 } 44 public void setuAge(Integer uAge) 45 { 46 this.uAge = uAge; 47 } 48 }View Code
三、編寫核心配置文件
使用註解的配置文件和xml映射的配置文件基本大同小異,但是在引入外部映射時使用的屬性是class而非resource屬性。
1 <?xml version='1.0' encoding='UTF-8'?> 2 <!DOCTYPE hibernate-configuration PUBLIC 3 "-//Hibernate/Hibernate Configuration DTD 3.0//EN" 4 "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> 5 6 <hibernate-configuration> 7 <session-factory> 8 9 <!--指定資料庫的參數 --> 10 <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> 11 <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> 12 <property name="hibernate.connection.url">jdbc:mysql://192.168.100.100:3306/test</property> 13 <property name="hibernate.connection.username">root</property> 14 <property name="hibernate.connection.password">1</property> 15 16 <!--指定hibernate是否顯式SQL語句及其格式化 --> 17 <property name="hibernate.show_sql">true</property> 18 <property name="hibernate.format_sql">true</property> 19 20 <!--指定表的生成方式-即是否由hibernate自動創建表,其取值為:create-drop、 21 create、validate、update--> 22 <property name="hibernate.hbm2ddl.auto">update</property> 23 24 <!--引入 ORM配置文件 --> 25 <mapping class="com.rocky.domain.User"/> 26 </session-factory> 27 28 </hibernate-configuration>View Code
四、編寫測試類
1 package com.rocky.testdriver; 2 3 import org.hibernate.Session; 4 import org.hibernate.SessionFactory; 5 import org.hibernate.Transaction; 6 import org.hibernate.cfg.Configuration; 7 8 import com.rocky.domain.User; 9 10 public class TestDriver 11 { 12 13 public static void main(String[] args) 14 { 15 // 載入配置文件 16 Configuration cfg = new Configuration(); 17 cfg.configure(); 18 // 創建會話工廠 19 SessionFactory factory = cfg.buildSessionFactory(); 20 // 獲取非線程綁定會話 21 Session session = factory.openSession(); 22 // 開啟事務 23 Transaction tx = session.beginTransaction(); 24 // 創建User對象 25 User user = new User(); 26 user.setuId(1); 27 user.setuName("rocky"); 28 user.setuAge(28); 29 30 // 將數據插入資料庫 31 session.save(user); 32 33 // 提交事務 34 tx.commit(); 35 // 關閉會話 36 session.close(); 37 } 38 39 }View Code