1.創建項目,項目名稱hibernatedemo26,目錄結構如圖所示

wKiom1jkiYTBd5xLAAAi0IyH9Lc295.png-wh_50


2.在項目中創建lib目錄存儲jar文件,目錄結構如圖所示

wKioL1jkiamjxueoAABeK2BeLAo864.png-wh_50


3.在src目錄中創建實體類Forum,包名(com.mycompany.demo.bean),如圖所示

wKiom1jkic-zSeu7AAA6iMcxnHk689.png-wh_50


4.實體類Forum的內容如下

package?com.mycompany.demo.bean;import?java.util.Set;public?class?Forum?{private?int?fid;private?String?name;private?Set<ForumPost>?forumPosts;public?int?getFid()?{return?fid;}public?void?setFid(int?fid)?{this.fid?=?fid;}public?String?getName()?{return?name;}public?void?setName(String?name)?{this.name?=?name;}public?Set<ForumPost>?getForumPosts()?{return?forumPosts;}public?void?setForumPosts(Set<ForumPost>?forumPosts)?{this.forumPosts?=?forumPosts;}
}


5.在src目錄中創建實體類Forum的映射文件Forum.hbm.xml,包名(com.mycompany.demo.bean),如圖所示

wKiom1jkihCRd9SSAAA59JaBTnU291.png-wh_50


6.映射文件Forum.hbm.xml的內容如下

<?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">?<!--package:指定<class/>所在的包?-->
<hibernate-mapping?package="com.mycompany.demo.bean"><!--name:類名table:表名?catalog:數據庫名稱,默認為hibernate.cfg.xml中配置的數據庫名稱--><class?name="Forum"?table="forum"><meta?attribute="class-description">This?class?contains?the?forum?detail.?</meta><!--name:屬性名colum:列名?--><id?name="fid"?type="int"?column="fid"><!--increment:hibernate維護主鍵值identity:數據庫自增長sequence:序列native:根據不同的數據庫選擇生成策略uuid:通過UUID算法生成,實際使用較多assigned:手工設置--><generator?class="native"/></id><!--length:字節長度type:字段類型,支持java和hibernate類型not-null:非空約束unique:唯一性約束--><property?name="name"?column="name"?/><!--lazy:false:直接加載true:延遲加載extra:特別延遲加載fetchjoin:迫切左外連接select:普通select查詢subselect?:子查詢方式--><set?name="forumPosts"><key?column="fid"/><one-to-many?class="ForumPost"/></set></class>
</hibernate-mapping>


7.在src目錄中創建實體類ForumPost,包名(com.mycompany.demo.bean),如圖所示

wKioL1jklcuC1NdzAAA87kG-mcU319.png-wh_50


8.實體類ForumPost的內容如下

package?com.mycompany.demo.bean;public?class?ForumPost?{private?int?pid;private?String?subject;private?Forum?forum;public?int?getPid()?{return?pid;}public?void?setPid(int?pid)?{this.pid?=?pid;}public?String?getSubject()?{return?subject;}public?void?setSubject(String?subject)?{this.subject?=?subject;}public?Forum?getForum()?{return?forum;}public?void?setForum(Forum?forum)?{this.forum?=?forum;}
}


9.在src目錄中創建實體類ForumPost的映射文件ForumPost.hbm.xml,包名(com.mycompany.demo.bean),如圖所示

wKioL1jklf2z3ZOSAAA9KObyCvo338.png-wh_50


10.映射文件ForumPost.hbm.xml的內容如下

<?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">?<!--package:指定<class/>所在的包?-->
<hibernate-mapping?package="com.mycompany.demo.bean"><!--name:類名table:表名?catalog:數據庫名稱,默認為hibernate.cfg.xml中配置的數據庫名稱--><class?name="ForumPost"?table="forumpost"><meta?attribute="class-description">This?class?contains?the?forumpost?detail.?</meta><!--name:屬性名colum:列名?--><id?name="pid"?type="int"?column="pid"><!--increment:hibernate維護主鍵值identity:數據庫自增長sequence:序列native:根據不同的數據庫選擇生成策略uuid:通過UUID算法生成,實際使用較多assigned:手工設置--><generator?class="native"/></id><!--length:字節長度type:字段類型,支持java和hibernate類型not-null:非空約束unique:唯一性約束--><property?name="subject"?column="subject"?type="string"?length="50"?not-null="true"?unique="false"/><!--name:關聯屬性?column:關聯屬性在數據庫對應的字段class:關聯屬性所對應的類型--><many-to-one?name="forum"?class="Forum"?column="fid"?cascade="save-update"?fetch="join"/></class><query?name="queryAll">from?Forum?f?left?outer?join?fetch?f.forumPosts</query>
</hibernate-mapping>


11.在src目錄中創建工具類 HbnUtil,包名(com.mycompany.demo.util),如圖所示

wKiom1jkllHiICIJAAAv4efAuxg877.png-wh_50


12.工具類?HbnUtil的內容如下

package?com.mycompany.demo.util;import?org.hibernate.Session;
import?org.hibernate.SessionFactory;
import?org.hibernate.cfg.Configuration;public?class?HbnUtil?{private?static?SessionFactory?sessionFactory;public?static?Session?getSession(){if(sessionFactory?==?null?||?sessionFactory.isClosed()){sessionFactory?=?new?Configuration().configure().buildSessionFactory();}return?sessionFactory.getCurrentSession();}
}

13.在src目錄中創建Hibernate的配置文件hibernate.cfg.xml,如圖所示

wKiom1jkloPD_a5XAAAsXarDnm0307.png-wh_50


14.Hibernate的配置文件hibernate.cfg.xml的內容如下

<?xml?version="1.0"?encoding="utf-8"?>
<!DOCTYPE?hibernate-configuration?SYSTEM?
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"><hibernate-configuration><session-factory><!--?方言,可以從Hibernate核心jar(hibernate-core-x.x.x.Finall.jar)文件中的or.hibernate.dialect包中找到相應的類,類的全名就是?--><property?name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property><!--?驅動?--><property?name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property><!--?數據庫連接地址?--><property?name="hibernate.connection.url">jdbc:mysql://localhost:3306/test</property><!--?用戶名?--><property?name="hibernate.connection.username">root</property><!--?密碼?--><property?name="hibernate.connection.password"></property><!--create:每次都新創建,如果存在就刪除create-drop:創建新表,sessionFactory關閉,表會刪除update?:表字段增加,會同步,字段減少不同步,數據改變會同步修改--><property?name="hibernate.hbm2ddl.auto">update</property><!--?輸出sql?--><property?name="hibernate.show_sql">true</property><!--?格式化sql?--><property?name="hibernate.format_sql">true</property><!--?事務環境一個線程對一個事務thread:本地事務環境jta:分布式事務環境SpringSessionContext:用于ssh整合--><property?name="hibernate.current_session_context_class">thread</property>	??<!--?使用c3p0數據源?--><property?name="hibernate.connection.provider_class">org.hibernate.c3p0.internal.C3P0ConnectionProvider</property>?<!--?List?of?XML?mapping?files?--><mapping?resource="com/mycompany/demo/bean/Forum.hbm.xml"/><mapping?resource="com/mycompany/demo/bean/ForumPost.hbm.xml"/>
</session-factory>
</hibernate-configuration>


15.在項目中創建test目錄存儲測試文件,文件名稱TestApp,包名(com.mycompany.demo.bean),目錄結構如圖所示

wKiom1jklsPgf2ATAAAp7eNW7Vw770.png-wh_50


16.TestApp測試類的內容如下

package?com.mycompany.demo.bean;import?java.util.HashSet;
import?java.util.List;
import?java.util.Set;import?org.hibernate.Criteria;
import?org.hibernate.Session;
import?org.hibernate.sql.JoinType;
import?org.junit.Before;
import?org.junit.Test;import?com.mycompany.demo.util.HbnUtil;public?class?TestApp?{private?Session?session;@Beforepublic?void?init(){session?=?HbnUtil.getSession();}/**?一對多雙向關聯-添加*?需要設置Forum.hbm.xml中的Set屬性為cascade="all"*/@Testpublic?void?testOneToManyAdd(){try?{session.beginTransaction();ForumPost?forumPost1?=?new?ForumPost();forumPost1.setSubject("A");ForumPost?forumPost2?=?new?ForumPost();forumPost2.setSubject("B");Set<ForumPost>?forumPosts?=?new?HashSet<ForumPost>();forumPosts.add(forumPost1);forumPosts.add(forumPost2);Forum?forum?=?new?Forum();forum.setName("foruma");forum.setForumPosts(forumPosts);session.save(forum);session.getTransaction().commit();}?catch?(Exception?e)?{session.getTransaction().rollback();e.printStackTrace();}}/**?多對一雙向關聯-fetch="join"*/@Testpublic?void?testFetchForJoin(){try?{session.beginTransaction();ForumPost?forumPost?=?session.get(ForumPost.class,?10);Forum?forum?=?forumPost.getForum();System.out.println(forum.getFid());System.out.println(forum.getName());session.getTransaction().commit();}?catch?(Exception?e)?{session.getTransaction().rollback();e.printStackTrace();}}
}

wKiom1jklvHh9ngaAABwCKMO5XE833.png-wh_50