首页 > 代码库 > Hibernate实体映射配置(XML)简单三步完美配置

Hibernate实体映射配置(XML)简单三步完美配置

我们在使用Hibernate框架的时候,非常纠结的地方就是实体和表之间的映射,今天借助汤老师的思路写了小教程,以后配置不用纠结了!

 

第一步:写注释

  格式为:?属性,表达的是本对象与?的?关系。
  例:“department属性,本对象与Department的多对一”

第二步:拷模板

  

第三步:填空:

  name属性:属性名(注释中的第1问号)
  class属性:关联的实体类型(注释中的第2个问号)
  column属性:
    <many-to-one column="..">:一般可以写成属性名加Id后缀,如属性为department,则column值写成departmentId。
    一对多中的<key column="..">:从关联的对方(对方是多对一)映射中把column值拷贝过来。
    多对多中的<key column=“..”>:一般可以写成本对象的名加Id后缀,如本对象名为User,则写为userId。
    多对多中的<many-to-many column=“..”>:一般可以写为关联对象的名称加Id后缀。

 

应用实例:

  用户、角色、部门之间的关系映射

  用户: ID 、名称

  角色:ID、角色名、描述

  部门:ID、部门名

  关系:

    用户和角色是多对多关系,用户和部门是多对一关系,部门自关联是多对一/一对多关系

  测试代码:

    实体类:(写实体类时候一定不要忘记给每个属性添加setter、getter方法,否则创建不了sessionFactory等对象

     User.java

 1 package com.qcf.po; 2  3 import java.util.HashSet; 4 import java.util.Set; 5  6 public class Depart { 7      8     private int id; 9     private String name;10     //用户11     Set<User> users=new HashSet<User>();12     13     //子类部门14     Set<Depart> departs=new HashSet<Depart>();15 16     //父类部门17     private Depart depart;18     19     20     public Set<User> getUsers() {21         return users;22     }23     public void setUsers(Set<User> users) {24         this.users = users;25     }26     public Set<Depart> getDeparts() {27         return departs;28     }29     public void setDeparts(Set<Depart> departs) {30         this.departs = departs;31     }32     public Depart getDepart() {33         return depart;34     }35     public void setDepart(Depart depart) {36         this.depart = depart;37     }38     public int getId() {39         return id;40     }41     public void setId(int id) {42         this.id = id;43     }44     public String getName() {45         return name;46     }47     public void setName(String name) {48         this.name = name;49     }50     public Depart(int id, String name) {51         super();52         this.id = id;53         this.name = name;54     }55     public Depart() {56         super();57     }58     59 60 }
View Code

     Role.java

 1 package com.qcf.po; 2  3 import java.util.HashSet; 4 import java.util.Set; 5  6 public class Role { 7      8     private int id; 9     private String name;10     private String destion;11     12     //用户13     Set<User> users=new HashSet<User>();14     15 16     public Set<User> getUser() {17         return users;18     }19     public void setUser(Set<User> users) {20         this.users = users;21     }22     public int getId() {23         return id;24     }25     public void setId(int id) {26         this.id = id;27     }28     public String getName() {29         return name;30     }31     public void setName(String name) {32         this.name = name;33     }34     public String getDestion() {35         return destion;36     }37     public void setDestion(String destion) {38         this.destion = destion;39     }40     public Role(int id, String name, String destion) {41         super();42         this.id = id;43         this.name = name;44         this.destion = destion;45     }46     47     public Set<User> getUsers() {48         return users;49     }50     public void setUsers(Set<User> users) {51         this.users = users;52     }53     public Role() {54         // TODO Auto-generated constructor stub55     }56 }
View Code

     Depart.java

 1 package com.qcf.po; 2  3 import java.util.HashSet; 4 import java.util.Set; 5  6 public class Depart { 7      8     private int id; 9     private String name;10     //用户11     Set<User> users=new HashSet<User>();12     13     //子类部门14     Set<Depart> departs=new HashSet<Depart>();15 16     //父类部门17     private Depart depart;18     19     20     public Set<User> getUsers() {21         return users;22     }23     public void setUsers(Set<User> users) {24         this.users = users;25     }26     public Set<Depart> getDeparts() {27         return departs;28     }29     public void setDeparts(Set<Depart> departs) {30         this.departs = departs;31     }32     public Depart getDepart() {33         return depart;34     }35     public void setDepart(Depart depart) {36         this.depart = depart;37     }38     public int getId() {39         return id;40     }41     public void setId(int id) {42         this.id = id;43     }44     public String getName() {45         return name;46     }47     public void setName(String name) {48         this.name = name;49     }50     public Depart(int id, String name) {51         super();52         this.id = id;53         this.name = name;54     }55     public Depart() {56         super();57     }58     59 60 }
View Code

    映射文件:

     User.hbm.xml

 1 <?xml version="1.0"?> 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  6     package="com.qcf.po"> 7     <class name="User" table="user">  8         <id name="id"> 9             <generator class="native"></generator>10         </id>11         <property name="name" column="username" type="string"></property>12         <property name="age"  column="userage" type="integer"></property>13 14         <!--depart属性,本对象与Depart的多对一  -->15         <many-to-one name="depart" class="Depart" column="departId"></many-to-one>16         17         <!--roles属性,本对象与Role的多对多  -->18         <set name="roles" table="user_role">19             <key column="roleId"></key>20             <many-to-many class="Role" column="userId"></many-to-many>21         </set>22     23     </class>24     25     26 </hibernate-mapping>

     Role.hbm.xml

 1 <?xml version="1.0"?> 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  6     package="com.qcf.po"> 7     <class name="Role">  8         <id name="id"> 9             <generator class="native"></generator>10         </id>11         <property name="name" column="rolename" type="string"></property>12         <property name="destion" column="roledestion"></property>13         14         <!--users属性,本对象与User的多对多  -->15         <set name="users" table="user_role">16             <key column="userId"></key>17             <many-to-many class="User" column="roleId"/>18         </set>19             20     </class>21     22     23 </hibernate-mapping>

    Depart.hbm.xml

 1 <?xml version="1.0"?> 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  6     package="com.qcf.po"> 7     <class name="Depart">  8         <id name="id"> 9             <generator class="native"></generator>10         </id>11         <property name="name" column="departname" type="string"></property>12 13         <!--users属性,本对象与User的一对多  -->14         <set name="users">15             <key column="departId"></key>16             <one-to-many class="User"/>17         </set>18         19         <!--departs属性,本对象与Depart(子类)的一对多  -->20         <set name="departs">21             <key column="departId"></key>22             <one-to-many class="Depart"/>23         </set>24         25         <!--depart属性,本对象与Depart(父类)的多对一  -->26         <many-to-one name="depart" column="departId" class="Depart"></many-to-one>27         28     </class>29     30     31 </hibernate-mapping>

   直接启动程序,或者获取sessionFactory对象即可在数据库中创建四张表。

 

  

Hibernate实体映射配置(XML)简单三步完美配置