• OA项目8:表映射关系及跟对象之间的关系处理


    首注:本学习教程为传智播客汤阳光讲师所公布的免费OA项目视频我的文字版实践笔记,本人用此来加强巩固自己开发知识,如有网友转载,请注明。谢谢。

    一 之前我们写了两个功能,这两个功能之间没有什么关联关系。下面我们做的用户管理功能将和之前的两个功能有相应的关联关系,所以要先匹配之间的关联关系,然后才能够进行代码的编写,下图就是三个功能类之间的模型图,这有益于外面分析功能间的关系和编写修改功能代码:

     

    二 将上面三个实体类全部写出来,具体如下:

     1 package cn.clear.oa.domain;
     2 
     3 import java.util.HashSet;
     4 import java.util.Set;
     5 
     6 public class User {
     7     private Long id;
     8     private String name;
     9     private String loginName;
    10     private String gender;
    11     private String phoneNumber;
    12     private String email;
    13     private String password;
    14     private String description;
    15     private Department department;
    16     private Set<Role> roles = new HashSet<Role>();
    17     public Set<Role> getRoles() {
    18         return roles;
    19     }
    20     public void setRoles(Set<Role> roles) {
    21         this.roles = roles;
    22     }
    23     public Long getId() {
    24         return id;
    25     }
    26     public void setId(Long id) {
    27         this.id = id;
    28     }
    29     public String getName() {
    30         return name;
    31     }
    32     public void setName(String name) {
    33         this.name = name;
    34     }
    35     public String getLoginName() {
    36         return loginName;
    37     }
    38     public void setLoginName(String loginName) {
    39         this.loginName = loginName;
    40     }
    41     public String getGender() {
    42         return gender;
    43     }
    44     public void setGender(String gender) {
    45         this.gender = gender;
    46     }
    47     public String getPhoneNumber() {
    48         return phoneNumber;
    49     }
    50     public void setPhoneNumber(String phoneNumber) {
    51         this.phoneNumber = phoneNumber;
    52     }
    53     public String getEmail() {
    54         return email;
    55     }
    56     public void setEmail(String email) {
    57         this.email = email;
    58     }
    59     public String getPassword() {
    60         return password;
    61     }
    62     public void setPassword(String password) {
    63         this.password = password;
    64     }
    65     public String getDescription() {
    66         return description;
    67     }
    68     public void setDescription(String description) {
    69         this.description = description;
    70     }
    71     public Department getDepartment() {
    72         return department;
    73     }
    74     public void setDepartment(Department department) {
    75         this.department = department;
    76     }
    77     
    78     
    79 }
    User.java
     1 package cn.clear.oa.domain;
     2 
     3 import java.util.HashSet;
     4 import java.util.Set;
     5 
     6 public class Role {
     7 
     8     private Long id;
     9     private String name;
    10     private String description;
    11     private Set<User> users = new HashSet<User>();
    12     public Long getId() {
    13         return id;
    14     }
    15     public void setId(Long id) {
    16         this.id = id;
    17     }
    18     public String getName() {
    19         return name;
    20     }
    21     public void setName(String name) {
    22         this.name = name;
    23     }
    24     public String getDescription() {
    25         return description;
    26     }
    27     public void setDescription(String description) {
    28         this.description = description;
    29     }
    30     public Set<User> getUsers() {
    31         return users;
    32     }
    33     public void setUsers(Set<User> users) {
    34         this.users = users;
    35     }
    36     
    37     
    38 }
    Role.java
     1 package cn.clear.oa.domain;
     2 
     3 import java.util.HashSet;
     4 import java.util.Set;
     5 
     6 public class Department {
     7 
     8     private Long id;
     9     private String name;
    10     private String description;
    11     private Department parent;
    12     private Set<User> users = new HashSet<User>();
    13     private Set<Department> children = new HashSet<Department>();
    14     
    15     public Department getParent() {
    16         return parent;
    17     }
    18     public void setParent(Department parent) {
    19         this.parent = parent;
    20     }
    21     public Set<User> getUsers() {
    22         return users;
    23     }
    24     public void setUsers(Set<User> users) {
    25         this.users = users;
    26     }
    27     public Set<Department> getChildren() {
    28         return children;
    29     }
    30     public void setChildren(Set<Department> children) {
    31         this.children = children;
    32     }
    33     public Long getId() {
    34         return id;
    35     }
    36     public void setId(Long id) {
    37         this.id = id;
    38     }
    39     public String getName() {
    40         return name;
    41     }
    42     public void setName(String name) {
    43         this.name = name;
    44     }
    45     public String getDescription() {
    46         return description;
    47     }
    48     public void setDescription(String description) {
    49         this.description = description;
    50     }
    51     
    52     
    53 }
    Department.java

    三 分析三个类的关联关系,在映射文件中配置相应的属性,我将映射文件内容表于下面:

     1 <?xml version="1.0"?>
     2 <!DOCTYPE hibernate-mapping PUBLIC 
     3     "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
     4     "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
     5 
     6 <hibernate-mapping package="cn.clear.oa.domain">
     7     <class name="User" table="oa_user">
     8         <id name="id"><generator class="native"/></id>
     9         <property name="name"/>
    10         <property name="loginName"/>
    11         <property name="gender"/>
    12         <property name="phoneNumber"/>
    13         <property name="email"/>
    14         <property name="password"/>
    15         <property name="description"/>
    16         <!-- department属性,本类与Department的多对1关系 -->
    17         <many-to-one name="department" class="Department" column="departmentId"></many-to-one>
    18         <!-- roles属性,本类与Role的多对多关系 -->
    19         <set name="roles" table="oa_user_role">
    20             <key column="userId"></key>
    21             <many-to-many class="Role" column="roleId"></many-to-many>
    22         </set>
    23     </class>
    24 </hibernate-mapping>
    User.hbm.xml
     1 <?xml version="1.0"?>
     2 <!DOCTYPE hibernate-mapping PUBLIC 
     3     "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
     4     "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
     5 
     6 <hibernate-mapping package="cn.clear.oa.domain">
     7     <class name="Role" table="oa_role">
     8         <id name="id">
     9             <generator class="native" />
    10         </id>
    11         <property name="name" />
    12         <property name="description" />
    13         <!-- users属性,本类与User的多对多 -->
    14         <set name="users" table="oa_user_role">
    15             <key column="roleId"></key>
    16             <many-to-many class="User" column="userId"></many-to-many>
    17         </set> 
    18     </class>
    19 </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://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
     5 
     6 <hibernate-mapping package="cn.clear.oa.domain">
     7     <class name="Department" table="oa_department">
     8         <id name="id"><generator class="native"/></id>
     9         <property name="name"/>
    10         <property name="description"/>
    11         <!-- users属性,本类与User的1对多 -->
    12         <set name="users">
    13             <key column="departmentId"></key>
    14             <one-to-many class="User"/>
    15         </set>
    16         <!-- parent属性,本类与(上级)Department的多对1 -->
    17         <many-to-one name="parent" class="Department" column="parentId"></many-to-one>
    18         <!-- children属性,本类与(下级)Department的1对多 -->
    19         <set name="children">
    20             <key column="parentId"></key>
    21             <one-to-many class="Department"/>
    22         </set>
    23     </class>
    24 </hibernate-mapping>
    Department.hbm.xml

      总结出映射文件的写法,下面的内容就来概括:

      例:<!-- users属性,本类与User类的一对多 -->

      格式:a属性,本类与b的c。

      解释:a为属性名,b为关联的对象名,c为对应的关系。

      模板(以后在填写多表映射时可以以以此为模板):

        1)多对一:

          <many-to-one name="a" class="b" column="a+Id"></many-to-one>

        2)一对多:

          <set name="a">

            <key column="对应多对一中的column"></key>

            <one-to-many class="b"/>

          </set>

        3)多对多:

          <set name="a" table="oa_本类类名(小写)_b类名(小写)">

            <key column="本类类名小写+Id"></key>

            <many-to-many class="b" column="b类名+Id"></many-to-many>

          </set>

    四 以上做完后启动之前的测试类TestSpring.java中的测试SessionFactory的方法进行自动建表,如不报错,去数据库看看是否正确。

  • 相关阅读:
    实现JSON数据的存储和读取
    MediaPlayer类——播放视频和音乐
    网络编程浅析
    线程浅析
    I/O浅析
    fragment之间的信息交互——onActivityResult()不经过Activity
    命名规则
    String方法(一)
    面试小结
    找工作中......
  • 原文地址:https://www.cnblogs.com/clear5/p/4043233.html
Copyright © 2020-2023  润新知