Hibernate工程項目創建基本步驟:導包(Hibernate依賴包、SQL驅動包)、編寫實體類、編寫ORM映射配置文件、編寫核心配置文件、編寫測試驅動。 項目工程代碼已經上傳到GitHub:https://github.com/wanyouxian/Hibernate 工程名:Hibernate ...
Hibernate工程項目創建基本步驟:導包(Hibernate依賴包、SQL驅動包)、編寫實體類、編寫ORM映射配置文件、編寫核心配置文件、編寫測試驅動。
項目工程代碼已經上傳到GitHub:https://github.com/wanyouxian/Hibernate 工程名:
整個工程項目結構如下圖:
一、導包
筆者使用的是MySQL資料庫,因此導入數據包如下圖:
二、編寫實體類
實體類就是與資料庫里表對應的實體類,其編寫有一定的規則:
1、提供私有成員變數和公有的get/set方法
2、提供空構造器:Hibernate反射需要使用該構造器
3、成員變數的類型儘量使用包裝類:如果是long類型,則儘量使用Long類型
4、不能使用final關鍵字修飾實體類:主要用於hibernate延遲載入時創建代理對象,即該代理對象是實體類的子類,因此不能使用final修飾,延遲載入主要用於hibernate性能優化
5、必須提供用於生成主鍵OID的屬性:如果不提供則不能使用Hibernate框架,hibernate是通過oid來區分是否為同一個對象
1 package com.rocky.domain; 2 3 public class User 4 { 5 private Integer uId; 6 private String uName; 7 private Integer uAge; 8 public User() 9 { 10 super(); 11 } 12 @Override 13 public String toString() 14 { 15 return "User [u_id=" + uId + ", uName=" + uName + ", uAge=" + uAge + "]"; 16 } 17 public Integer getuId() 18 { 19 return uId; 20 } 21 public void setuId(Integer uId) 22 { 23 this.uId = uId; 24 } 25 public String getuName() 26 { 27 return uName; 28 } 29 public void setuName(String uName) 30 { 31 this.uName = uName; 32 } 33 public Integer getuAge() 34 { 35 return uAge; 36 } 37 public void setuAge(Integer uAge) 38 { 39 this.uAge = uAge; 40 } 41 }View Code
三、編寫ORM映射文件
一個實體類對應於一個ORM映射文件,主要用於指定實體類與表的映射規則。
1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE hibernate-mapping PUBLIC 3 "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 4 "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 5 <hibernate-mapping package="com.rocky.domain"> 6 <!--指定實體類和表的對應關係 --> 7 <class name="User" table="tb_user"> 8 <!--指定主鍵 --> 9 <id name="uId"> 10 <!--指定主鍵生成策略,assigned:代表生成自然主鍵,實際開發中我常使用native:根據配置選擇主鍵 --> 11 <generator class="assigned"></generator> 12 </id> 13 <!--指定實體類屬性和表的列的對應關係,如果不填寫column屬性則創建的表和實體屬性名相同, 14 具體情況看公司表的設計和要求 --> 15 <property name="uName"></property> 16 <property name="uAge"></property> 17 </class> 18 </hibernate-mapping>View Code
四、編寫主配置文件
一個項目工程只有一個核心配置文件,用於配置和數據連接的參數和引入ORM映射配置文件
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 resource="com/rocky/domain/User.hbm.xml"/> 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 //載入配置文件 17 Configuration cfg = new Configuration(); 18 cfg.configure(); 19 //創建會話工廠 20 SessionFactory factory = cfg.buildSessionFactory(); 21 //獲取非線程綁定會話 22 Session session = factory.openSession(); 23 //開啟事務 24 Transaction tx = session.beginTransaction(); 25 //創建User對象 26 User user = new User(); 27 user.setuId(1); 28 user.setuName("rocky"); 29 user.setuAge(28); 30 31 //將數據插入資料庫 32 session.save(user); 33 34 //提交事務 35 tx.commit(); 36 //關閉會話 37 session.close(); 38 } 39 40 }View Code