zoukankan      html  css  js  c++  java
  • hibernate的基础学习--一对多关联

    基本的用户和部门类,只有uuid和名称,没有其余字段。

    配置文件

    部门:

     1 <?xml version="1.0" encoding="utf-8" ?>
     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>
     7     <class name="hib.po.Dept" table="dept" schema="hibernatedb">
     8         <!-- 类的唯一标示和表中的主键映射 -->
     9         <id name="deptId" column="dept_id">
    10             <!-- 主键生成策略:native(mysql自增) -->
    11             <generator class="uuid"></generator>
    12         </id>
    13         
    14         <property name="deptName" column="deptname"></property>
    15         
    16         <!-- 关系字段:用户  one2many
    17             name:关联关系属性
    18             class:关联关系属性的类型
    19             column:指定生成表中的关系字段名称(外键名)
    20             inverse="true":放弃维护关系功能
    21          -->
    22         <set name="users" inverse="false">
    23             <!-- column: 用来对应 关联表(t_user)中的外键名称 -->
    24             <key column="dept_id"></key>
    25             <!-- class:关联关系属性(集合)中的元素的类型 -->
    26             <one-to-many class="hib.po.User"/>
    27         </set>
    28     </class>
    29 </hibernate-mapping>
    View Code

    用户:

     1 <?xml version="1.0" encoding="utf-8" ?>
     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>
     7     <class name="hib.po.User" table="user" schema="hibernatedb">
     8         <!-- 类的唯一标示和表中的主键映射 -->
     9         <id name="userId" column="user_id">
    10             <!-- 主键生成策略:native(mysql自增) -->
    11             <generator class="uuid"></generator>
    12         </id>
    13         
    14         <!-- 普通属性和普通字段映射 -->
    15         <property name="username" column="username"></property>
    16         
    17         <!-- 关系字段:部门  many2one
    18             name:关联关系属性
    19             class:关联关系属性的类型
    20             column:指定生成表中的关系字段名称(外键名)
    21          -->
    22         <many-to-one 
    23         name="dept" 
    24         class="hib.po.Dept"
    25         column="dept_id"
    26         ></many-to-one>
    27     </class>
    28 </hibernate-mapping>
    View Code

    基础的增删改查方法

     1 /**
     2  * @author nunu
     3  * 测试hibernate OneToMany 
     4  */
     5 public class TestHibernateOneToMany {
     6 
     7     /**
     8      * 添加用户
     9      */
    10     @Test
    11     public void addUser() {
    12         SessionFactory sf = H3Util.getSessionFactory();
    13         Session session = sf.openSession();
    14         Transaction ts = session.beginTransaction();
    15         User s1 = new User(null, "小小", null);
    16         User s2 = new User(null, "小五", null);
    17         session.save(s1);
    18         session.save(s2);
    19         
    20         ts.commit();
    21         session.close();
    22     }
    23     
    24     /**
    25      * 添加部门
    26      */
    27     @Test
    28     public void addDept() {
    29         SessionFactory sf = H3Util.getSessionFactory();
    30         Session session = sf.openSession();
    31         Transaction ts = session.beginTransaction();
    32         Dept dept1 = new Dept(null, "研发部", null);
    33         Dept dept2 = new Dept(null, "人事部", null);
    34         Dept dept3 = new Dept(null, "财务部", null);
    35         session.save(dept1);
    36         session.save(dept2);
    37         session.save(dept3);
    38         
    39         ts.commit();
    40         session.close();
    41     }
    42     
    43     /**
    44      * 从员工端维护关系:多端维护
    45      */
    46     @Test
    47     public void updateMany(){
    48         SessionFactory sf = H3Util.getSessionFactory();
    49         Session session = sf.openSession();
    50         Transaction ts = session.beginTransaction();
    51         
    52         User user1 = (User) session.get(User.class, "ff80808157c82de80157c82deb2d0000");
    53         Dept dept1 = (Dept) session.get(Dept.class, "ff80808157c831050157c83106b10000");
    54         System.out.println(dept1.getDeptName());
    55         //从用户角度维护关系:将部门对象添加到用户中
    56         user1.setDept(dept1);
    57         
    58         //最后加上
    59         session.update(user1);
    60         
    61         ts.commit();
    62         session.close();
    63         System.out.println("====");
    64     }
    65     
    66     /**
    67      * 从一端维护关系
    68      */
    69     @Test
    70     public void updateOne() {
    71         SessionFactory sf = H3Util.getSessionFactory();
    72         Session session = sf.openSession();
    73         Transaction ts = session.beginTransaction();
    74         
    75         User user1 = (User) session.get(User.class, "ff80808157c831830157c83184a90000");
    76         Dept dept1 = (Dept) session.get(Dept.class, "ff80808157c831050157c83106c40001");
    77         System.out.println(dept1.getDeptName());
    78         //从部门角度维护关系:将用户对象添加到部门中
    79         Set<User> users = dept1.getUsers();
    80         users.add(user1);        
    81         
    82         dept1.setUsers(users);
    83         
    84         session.update(dept1);
    85         
    86         ts.commit();
    87         session.close();
    88         System.out.println("====");
    89     }
    90     
    91 }
  • 相关阅读:
    《软件需求模式》阅读笔记二
    《软件需求模式》阅读笔记一
    《编写有效用例》阅读笔记三
    《编写有效用例》阅读笔记二
    《编写有效用例》阅读笔记一
    《软件需求十步走》阅读笔记三
    英文一分钟自我介绍
    c语言面试常见题
    docker
    LLDP
  • 原文地址:https://www.cnblogs.com/acmwangpeng/p/5969586.html
Copyright © 2011-2022 走看看