基于eclipse和hiber的pojo、数据库表与mapping的相互转换(二)

来源:互联网 发布:lua for windows 5.2 编辑:程序博客网 时间:2024/04/28 19:31

思路二:由数据库表,生成Mapping映射文件和POJO类。

   虽然可以实现,但个人觉着先设计数据库,然后再生成类不符合Hibernate的面对对象持久化的思维方式。好了,还是说步骤吧,首先在test数据库建立两张表,分别为course表和teacher表

[sql] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  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 plaincopyprint?在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 plaincopyprint?在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 plaincopyprint?在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 plaincopyprint?在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 plaincopyprint?在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代码为

[sql] view plaincopyprint?在CODE上查看代码片派生到我的代码片
  1. create table DEPARTMENT (ID integer not nullNAME varchar(255), primary key (ID));</span>  

POJO类:

[java] view plaincopyprint?在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脚本两种实现方式,非常全面。
0 0
原创粉丝点击