HibernateTools實現pojo類 數據庫schma mapping映射的相互轉換 二

接着上一篇博客:HibernateTools實現pojo類 數據庫schma mapping映射的相互轉換


思路二:由數據庫表,生成Mapping映射文件和POJO類。

   雖然可以實現,但個人覺着先設計數據庫,然後再生成類不符合Hibernate的面對對象持久化的思維方式。好了,還是說步驟吧,首先在test數據庫建立兩張表,分別爲course表和teacher表

  1. -- ----------------------------  
  2. -- Table structure for course  
  3. -- ----------------------------  
  4. DROP TABLE IF EXISTS `course`;  
  5. CREATE TABLE `course` (  
  6.   `id` int(11) NOT NULL,  
  7.   `namevarchar(255) DEFAULT NULL,  
  8.   PRIMARY KEY (`id`)  
  9. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;  
  10.   
  11. -- ----------------------------  
  12. -- Table structure for teacher  
  13. -- ----------------------------  
  14. DROP TABLE IF EXISTS `teacher`;  
  15. CREATE TABLE `teacher` (  
  16.   `id` int(11) NOT NULL,  
  17.   `namevarchar(255) DEFAULT NULL,  
  18.   PRIMARY KEY (`id`)  
  19. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;  
建好表後,在eclipse項目上右鍵-->new,如下圖,選擇框中的第三項,這個reveng.xml文件用於配置 選擇要生成POJO類的數據庫表。


選擇上篇博客中創建的Console configuration項,點Database schema框下的refresh,之後可以看到test數據庫,單擊就出現了course和teacher表,全選後點擊Include,之後點finish,如下圖


再來到Hibernate Code Generation Configuration窗體,首先配置下Output directory輸出目錄,在盡挨着的複選框打上勾,然後在package欄寫上生成文件要輸出到哪個包,並選擇剛配置好的reveng.xml文件


配置要輸出的項,這裏選定前兩項,生成.java和.hbm.xml,就是我們想要的POJO類和Mapping映射文件。之後點擊run就好了。


結果如下圖:


生成的Mapping映射文件的代碼

[html] view plain copy
 print?在CODE上查看代碼片派生到我的代碼片
  1. <?xml version="1.0"?>  
  2. <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"  
  3. "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">  
  4. <!-- Generated 2014-5-31 11:19:19 by Hibernate Tools 4.0.0 -->  
  5. <hibernate-mapping>  
  6.     <class name="org.hibernate.test.Course" table="course" catalog="test">  
  7.         <id name="id" type="int">  
  8.             <column name="id" />  
  9.             <generator class="assigned" />  
  10.         </id>  
  11.         <many-to-one name="teacher" class="org.hibernate.test.Teacher" fetch="select">  
  12.             <column name="teacherId" not-null="true" />  
  13.         </many-to-one>  
  14.         <property name="name" type="string">  
  15.             <column name="name" />  
  16.         </property>  
  17.     </class>  
  18. </hibernate-mapping>  
[html] view plain copy
 print?在CODE上查看代碼片派生到我的代碼片
  1. <?xml version="1.0"?>  
  2. <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"  
  3. "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">  
  4. <!-- Generated 2014-5-31 11:19:19 by Hibernate Tools 4.0.0 -->  
  5. <hibernate-mapping>  
  6.     <class name="org.hibernate.test.Teacher" table="teacher" catalog="test">  
  7.         <id name="id" type="int">  
  8.             <column name="id" />  
  9.             <generator class="assigned" />  
  10.         </id>  
  11.         <property name="name" type="string">  
  12.             <column name="name" />  
  13.         </property>  
  14.         <set name="courses" table="course" inverse="true" lazy="true" fetch="select">  
  15.             <key>  
  16.                 <column name="teacherId" not-null="true" />  
  17.             </key>  
  18.             <one-to-many class="org.hibernate.test.Course" />  
  19.         </set>  
  20.     </class>  
  21. </hibernate-mapping>  

生成的POJO類:

[java] view plain copy
 print?在CODE上查看代碼片派生到我的代碼片
  1. package org.hibernate.test;  
  2.   
  3. // Generated 2014-5-31 11:19:19 by Hibernate Tools 4.0.0  
  4.   
  5. /** 
  6.  * Course generated by hbm2java 
  7.  */  
  8. public class Course implements java.io.Serializable {  
  9.   
  10.     private int id;  
  11.     private Teacher teacher;  
  12.     private String name;  
  13.   
  14.     public Course() {  
  15.     }  
  16.   
  17.     public Course(int id, Teacher teacher) {  
  18.         this.id = id;  
  19.         this.teacher = teacher;  
  20.     }  
  21.   
  22.     public Course(int id, Teacher teacher, String name) {  
  23.         this.id = id;  
  24.         this.teacher = teacher;  
  25.         this.name = name;  
  26.     }  
  27.   
  28.     public int getId() {  
  29.         return this.id;  
  30.     }  
  31.   
  32.     public void setId(int id) {  
  33.         this.id = id;  
  34.     }  
  35.   
  36.     public Teacher getTeacher() {  
  37.         return this.teacher;  
  38.     }  
  39.   
  40.     public void setTeacher(Teacher teacher) {  
  41.         this.teacher = teacher;  
  42.     }  
  43.   
  44.     public String getName() {  
  45.         return this.name;  
  46.     }  
  47.   
  48.     public void setName(String name) {  
  49.         this.name = name;  
  50.     }  
  51.   
  52. }  

[java] view plain copy
 print?在CODE上查看代碼片派生到我的代碼片
  1. package org.hibernate.test;  
  2.   
  3. // Generated 2014-5-31 11:19:19 by Hibernate Tools 4.0.0  
  4.   
  5. import java.util.HashSet;  
  6. import java.util.Set;  
  7.   
  8. /** 
  9.  * Teacher generated by hbm2java 
  10.  */  
  11. public class Teacher implements java.io.Serializable {  
  12.   
  13.     private int id;  
  14.     private String name;  
  15.     private Set courses = new HashSet(0);  
  16.   
  17.     public Teacher() {  
  18.     }  
  19.   
  20.     public Teacher(int id) {  
  21.         this.id = id;  
  22.     }  
  23.   
  24.     public Teacher(int id, String name, Set courses) {  
  25.         this.id = id;  
  26.         this.name = name;  
  27.         this.courses = courses;  
  28.     }  
  29.   
  30.     public int getId() {  
  31.         return this.id;  
  32.     }  
  33.   
  34.     public void setId(int id) {  
  35.         this.id = id;  
  36.     }  
  37.   
  38.     public String getName() {  
  39.         return this.name;  
  40.     }  
  41.   
  42.     public void setName(String name) {  
  43.         this.name = name;  
  44.     }  
  45.   
  46.     public Set getCourses() {  
  47.         return this.courses;  
  48.     }  
  49.   
  50.     public void setCourses(Set courses) {  
  51.         this.courses = courses;  
  52.     }  
  53.   
  54. }  

到此我們就完成了由數據庫表生成POJO類和Mapping映射文件的過程


思路三:由Mapping映射文件生成數據庫DDL和POJO類


首先,新建一個Mapping文件,這裏在項目中建立Department.hbm.xml。

[html] view plain copy
 print?在CODE上查看代碼片派生到我的代碼片
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >  
  3. <hibernate-mapping>  
  4.     <class name="org.hibernate.test.Department" table="DEPARTMENT">  
  5.         <id name="id" type="int">  
  6.             <column name="ID" />  
  7.             <generator class="increment"></generator>  
  8.         </id>  
  9.         <property name="name" type="java.lang.String">  
  10.             <column name="NAME" />  
  11.         </property>  
  12.     </class>  
  13. </hibernate-mapping>  

接下來建一個新的Console Configuration文件,基本配置和上文中配置的過程一樣,最關鍵的是加入mapping文件。


接下來,改下Hibernate Code Generation Configuration就好了,首選選擇新配置的Console Configuration文件


接下來選擇要生成的Schema和.Java文件,然後run就可以了。


最終結果如圖:


生成的DDL代碼爲

  1. create table DEPARTMENT (ID integer not nullNAME varchar(255), primary key (ID));</span>  

POJO類:

[java] view plain copy
 print?在CODE上查看代碼片派生到我的代碼片
  1. package org.hibernate.test;  
  2.   
  3. // Generated 2014-5-31 16:23:27 by Hibernate Tools 4.0.0  
  4.   
  5. /** 
  6.  * Department generated by hbm2java 
  7.  */  
  8. public class Department implements java.io.Serializable {  
  9.   
  10.     private int id;  
  11.     private String name;  
  12.   
  13.     public Department() {  
  14.     }  
  15.   
  16.     public Department(String name) {  
  17.         this.name = name;  
  18.     }  
  19.   
  20.     public int getId() {  
  21.         return this.id;  
  22.     }  
  23.   
  24.     public void setId(int id) {  
  25.         this.id = id;  
  26.     }  
  27.   
  28.     public String getName() {  
  29.         return this.name;  
  30.     }  
  31.   
  32.     public void setName(String name) {  
  33.         this.name = name;  
  34.     }  
  35.   
  36. }  

    好了,至此POJO類,Mapping文件和數據庫表相互轉化就都介紹完了,當然這是藉助eclipse的插件實現的,熟悉使用ant的朋友也可以藉助ant腳本來實現,具體的教程去google吧。這裏推薦下HibernateTools的官方教程,包含了eclipse插件和ant腳本兩種實現方式,非常全面。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章