zoukankan      html  css  js  c++  java
  • hibernate之初学一对多和多对一配置及使用

    按查询及存取速率来说的一对多用的相对多对一少一些,这里只写主要配置文件的代码

    首先是hibernate的配置文件

    <!DOCTYPE hibernate-configuration PUBLIC
            "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
            "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
            <hibernate-configuration>
                <session-factory>
                    <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
                    <property name="hibernate.connection.url">jdbc:mysql:///webproject</property>
                    <property name="hibernate.connection.username">root</property>            
                    <property name="hibernate.connection.password">123456</property>            
                    <property name="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</property>
                    <property name="hibernate.show_sql">true</property>
                    <property name="hibernate.hbm2ddl.auto">create</property>
                    <mapping resource="com/shaoxin/entity/Dept.hbm.xml"/>
                    <mapping resource="com/shaoxin/entity/Employee.hbm.xml"/>
                </session-factory>
            </hibernate-configuration>

    一对多的配置文件代码,很明显使用到了set集合

    <?xml version="1.0"?>
    <!DOCTYPE hibernate-mapping PUBLIC 
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
        <hibernate-mapping package="com.shaoxin.entity">
            <class name="Dept" table="dept">
                <id name="deptid" column="deptid">
                    <generator class="native"></generator>
                </id>
                <property name="deptName" column="deptname"></property><!--
                一对多设置外键方式,class代表外键类型
                --><set name="setEmployees" table="employee">
                    <key column="dept_id"></key>
                    <one-to-many class="Employee"/>
                </set>
            </class>
        </hibernate-mapping>

    对应的实体类:

    package com.shaoxin.entity;
    
    import java.util.HashSet;
    import java.util.Set;
    
    public class Dept {
        private int deptid;
        private String deptName;
        private Set<Employee> setEmployees = new HashSet<Employee>();
    
        public int getDeptid() {
            return deptid;
        }
    
        public void setDeptid(int deptid) {
            this.deptid = deptid;
        }
    
        public String getDeptName() {
            return deptName;
        }
    
        public void setDeptName(String deptName) {
            this.deptName = deptName;
        }
    
        public Set<Employee> getSetEmployees() {
            return setEmployees;
        }
    
        public void setSetEmployees(Set<Employee> setEmployees) {
            this.setEmployees = setEmployees;
        }
    
    }

    多对一的配置文件代码,很明显是一个对象类型

    <?xml version="1.0"?>
    <!DOCTYPE hibernate-mapping PUBLIC 
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
        <hibernate-mapping package="com.shaoxin.entity">
            <class name="Employee"  table="employee">
                <id name="employeeid" column="employeeid">
                    <generator class="native"></generator>
                </id>
                <property name="employeeName" column="employeename"/><!--
                多对一创建外键方式:属性分别为:外键对应的表,外键字段,外键类型
                --><many-to-one name="dept" column="dept_id" class="Dept"></many-to-one>
            </class>
        </hibernate-mapping>

    对应的实体类

    package com.shaoxin.entity;
    
    public class Employee {
        private int employeeid;
        private String employeeName;
        private Dept dept;
    
        public int getEmployeeid() {
            return employeeid;
        }
    
        public void setEmployeeid(int employeeid) {
            this.employeeid = employeeid;
        }
    
        public String getEmployeeName() {
            return employeeName;
        }
    
        public void setEmployeeName(String employeeName) {
            this.employeeName = employeeName;
        }
    
        public Dept getDept() {
            return dept;
        }
    
        public void setDept(Dept dept) {
            this.dept = dept;
        }
    
    }

    测试这两个存储方式

    package com.shaoxin.entity;
    
    import org.hibernate.SessionFactory;
    import org.hibernate.Transaction;
    import org.hibernate.cfg.Configuration;
    import org.hibernate.classic.Session;
    import org.junit.Test;
    
    public class TestMany2Many {
        static SessionFactory sf;
        static {
            sf = new Configuration().configure().buildSessionFactory();
        }
    
        @Test
        public void testOne2Many() throws Exception {
            Session openSession = sf.openSession();
            Transaction beginTransaction = openSession.beginTransaction();
            Employee empzs = new Employee();
            Employee empls = new Employee();
            empls.setEmployeeName("李四");
            empzs.setEmployeeName("张三");
            Dept dept = new Dept();
            dept.getSetEmployees().add(empls);
            dept.getSetEmployees().add(empzs);
            dept.setDeptName("应用开发");
            openSession.save(empls);
            openSession.save(empzs);
            openSession.save(dept);
            beginTransaction.commit();
            openSession.close();
        }
    
        @Test
        public void testMany2One() throws Exception {
            Session openSession = sf.openSession();
            Transaction beginTransaction = openSession.beginTransaction();
            Employee empzs = new Employee();
            Employee empls = new Employee();
            Dept dept = new Dept();
            dept.setDeptName("应用开发");
            empls.setEmployeeName("李四");
            empzs.setEmployeeName("张三");
            empls.setDept(dept);
            empzs.setDept(dept);
            openSession.save(dept);
            openSession.save(empls);
            openSession.save(empzs);
            beginTransaction.commit();
            openSession.close();
        }
    }
  • 相关阅读:
    你知道require是什么吗?
    jQuery类库的设计
    多线程下载图片
    多线程与CPU和多线程与GIL
    一个python小爬虫
    一个方格表的问题
    使用django发布带图片的网页(上)
    uWSGI+Django+nginx(下)
    uWSGI+Django (中)
    Linux下安装Python3的django并配置mysql作为django默认数据库(转载)
  • 原文地址:https://www.cnblogs.com/ShaoXin/p/7105837.html
Copyright © 2011-2022 走看看