Hibernate(四)一对多映射

来源:互联网 发布:上海松丰齿科骗局知乎 编辑:程序博客网 时间:2024/06/06 01:08

数据库表创建

create table grade(    gid int primary key,    gname varchar(20) not null,    gdesc varchar(50));create table student(    sid int primary key,    sname varchar(20) not null,    sex char(2),    gid int);alter table student add constraint fk_student_gid foreign key (gid)references grade(gid);

Grade年级class

package com.imooc.entity;import java.io.Serializable;import java.util.HashSet;import java.util.Set;public class Grade implements Serializable {    private int gid;    private String gname;    private String gdesc;    //在一方定义一个多方的集合    private Set<Student> students = new HashSet<Student>();    public int getGid() {        return gid;    }    public void setGid(int gid) {        this.gid = gid;    }    public String getGname() {        return gname;    }    public void setGname(String gname) {        this.gname = gname;    }    public String getGdesc() {        return gdesc;    }    public void setGdesc(String gdesc) {        this.gdesc = gdesc;    }    public Set<Student> getStudents() {        return students;    }    public void setStudents(Set<Student> students) {        this.students = students;    }    public Grade() {        super();    }    public Grade(String gname, String gdesc) {        super();        this.gname = gname;        this.gdesc = gdesc;    }    public Grade(int gid, String gname, String gdesc, Set<Student> students) {        super();        this.gid = gid;        this.gname = gname;        this.gdesc = gdesc;        this.students = students;    }}

学生student class

package com.imooc.entity;import java.io.Serializable;public class Student implements Serializable {    private int sid;    private String sname;    private String sex;    private Grade grade;    public int getSid() {        return sid;    }    public void setSid(int sid) {        this.sid = sid;    }    public String getSname() {        return sname;    }    public void setSname(String sname) {        this.sname = sname;    }    public String getSex() {        return sex;    }    public void setSex(String sex) {        this.sex = sex;    }    public Grade getGrade() {        return grade;    }    public void setGrade(Grade grade) {        this.grade = grade;    }    public Student() {        super();    }    public Student(String sname, String sex) {        super();        this.sname = sname;        this.sex = sex;    }}

Grade.hbm.xml

<?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 >    <class name="com.imooc.entity.Grade" table="grade">        <id name="gid" column="gid" type="java.lang.Integer">            <generator class="increment"></generator>        </id>        <property name="gname" type="java.lang.String">            <column name="gname" length="20" not-null="true"></column>        </property>        <property name="gdesc" >            <column name="gdesc"></column>        </property>        <!-- 配置单向的一对多关系  inverse="true" 由多的一方进行   cascade级联操作保存one的一方会保存many的一方-->        <set name="students" table="student" cascade="save-update" inverse="true">            <!--指定关联的外键列  -->            <key column="gid"></key>            <one-to-many class="com.imooc.entity.Student"/>        </set>    </class></hibernate-mapping>

student.hbm.xml

<?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 >    <class name="com.imooc.entity.Student" table="student">        <id name="sid" column="sid" type="java.lang.Integer">            <generator class="increment"></generator>        </id>        <property name="sname" type="java.lang.String">            <column name="sname" length="20" not-null="true"></column>        </property>        <property name="sex" >            <column name="sex"></column>        </property>        <many-to-one name="grade" class="com.imooc.entity.Grade" column="gid">        </many-to-one>    </class></hibernate-mapping>

HibernateUtil.java class

package com.imooc.util;import org.hibernate.Session;import org.hibernate.SessionFactory;import org.hibernate.boot.registry.StandardServiceRegistry;import org.hibernate.boot.registry.StandardServiceRegistryBuilder;import org.hibernate.cfg.Configuration;public class HibernateUtil {    private static SessionFactory sessionFactory;    private static Session session;    static{        Configuration config = new Configuration().configure();        //ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(config.getProperties()).buildServiceRegistry();        StandardServiceRegistry ssr = new StandardServiceRegistryBuilder().applySettings(config.getProperties()).build();        sessionFactory = config.buildSessionFactory(ssr);    }    //获取SessionFactory    public static SessionFactory getSessionFactory(){        return sessionFactory;    }    //获取Session    public static Session getSession(){        session = sessionFactory.openSession();        return session;    }     //关闭session    public static void closeSession(Session session){        if(session!=null){            session.close();        }    }}

Hibernate.cfg.xml

<?xml version='1.0' encoding='utf-8'?><!DOCTYPE hibernate-configuration PUBLIC        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"        "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"><hibernate-configuration>  <session-factory>    <!-- Database connection settings -->    <property name="connection.driver_class">com.mysql.jdbc.Driver</property>    <property name="connection.url">jdbc:mysql:///imooc?useUnicode=true&amp;characterEncoding=UTF-8</property>    <property name="connection.username">root</property>    <property name="connection.password">123456</property>    <!-- SQL dialect -->    <property name="dialect">org.hibernate.dialect.MySQLDialect</property>    <!-- Enable Hibernate's automatic session context management -->    <property name="current_session_context_class">thread</property>    <!-- Echo all executed SQL to stdout -->    <property name="show_sql">true</property>    <!-- Drop and re-create the database schema on startup -->    <property name="hbm2ddl.auto">update</property>    <mapping resource="com/imooc/entity/Grade.hbm.xml"/>    <mapping resource="com/imooc/entity/Student.hbm.xml"/>  </session-factory></hibernate-configuration>

增删改查

package com.imooc.entity;import java.util.Set;import org.hibernate.Session;import org.hibernate.Transaction;import com.imooc.util.HibernateUtil;public class Test {    public static void main(String[] args) {        add();        //findStudentsByGrade();        //update();        //delete();    }    //将学生添加到班级    public static void add(){        Grade g = new Grade("Java四班","Java软件开发四班");        Student stu1 = new Student("张三2","男");        Student stu2 = new Student("慕女神2","女");        //如果希望在学生表中添加对应的班级编号,        g.getStudents().add(stu1);        g.getStudents().add(stu2);        Session session = HibernateUtil.getSession();        Transaction tx = session.beginTransaction();        session.save(g);        //设置cascade后会自动保存        //session.save(stu1);        //session.save(stu2);        tx.commit();        HibernateUtil.closeSession(session);    }    public static void findStudentsByGrade(){        Session session = HibernateUtil.getSession();        Grade grade = (Grade) session.get(Grade.class, 1);        System.out.println(grade.getGname()+","+grade.getGdesc());        Set<Student> students= grade.getStudents();        for(Student stu:students){            System.out.println(stu.getSname()+","+stu.getSex());        }    }    public static void update(){        Grade g = new Grade("Java二班","Java软件开发二班");        Session session = HibernateUtil.getSession();        Transaction tx = session.beginTransaction();        Student stu = (Student) session.get(Student.class,1);        g.getStudents().add(stu);        session.save(g);        tx.commit();        HibernateUtil.closeSession(session);    }    public static void delete(){        Session session = HibernateUtil.getSession();        Transaction tx = session.beginTransaction();        Student stu = (Student) session.get(Student.class, 2);        session.delete(stu);        tx.commit();        HibernateUtil.closeSession(session);    }}
package com.imooc.entity;import org.hibernate.Session;import org.hibernate.Transaction;import com.imooc.util.HibernateUtil;public class Test02 {    public static void main(String[] args) {        save();    }    public static void save(){        Grade g = new Grade("Java三班", "java软件开发三班");        Student stu1 =new Student("慕女生","女");        Student stu2 =new Student("小穆穆","男");        stu1.setGrade(g);        stu2.setGrade(g);        Session session = HibernateUtil.getSession();        Transaction tx = session.beginTransaction();        session.save(g);        session.save(stu1);        session.save(stu2);        tx.commit();        HibernateUtil.closeSession(session);    }}
原创粉丝点击