hibernate练习一对多映射

        大致流程:①建一个java项目,建立一个lib目录,将相关的jar包导入。

                     ②创建一个hibernate的工具类,获得一个会话工厂。

                     ③配置hibernate配置文件hibernate.cfg.xml。

                     ④创建实体类grade和student

                     ⑤在数据库中建表并设置关联关系

                      ⑥配置映射文件grade.hbm.xml和student.hbm.xml

                      ⑦创建测试类

package com.xatu.util;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;

public class HibernateUtil {
	private static SessionFactory sessionFactory;
	private static  Session session;
	
	static{
		//创建configuration对象,读取hibernate.cfg.xml文件,完成初始化。
		Configuration config = new Configuration().configure();
		//创建服务注册对象
		ServiceRegistry serviceRegistry = new ServiceRegistryBuilder().applySettings(config.getProperties()).buildServiceRegistry(); 
		//创建工厂回话对象
		sessionFactory = config.buildSessionFactory(serviceRegistry);
	}
	
	public static SessionFactory getSessionFactory(){
		return sessionFactory;
	}
	
	public static Session getSession(){
		session = sessionFactory.openSession();
		return session;
	}
	
	public static void closeSession(Session session){
		if(session!=null){
			session.close();
		}
	}
}

<?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>

        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="connection.url">
			<![CDATA[
				jdbc:mysql://localhost:3306/xatu?useUnicode=true&characterEncoding=utf8
			]]>
        </property>
        <property name="connection.username">root</property>
        <property name="connection.password">mysql</property>
        <property name="dialect">
            org.hibernate.dialect.MySQLDialect
        </property>
        
        <property name="show_sql">true</property>
        <property name="format_sql">true</property>
        <property name="hbm2ddl_auto">update</property>
        
        <mapping resource="com/xatu/entity/Grade.hbm.xml"/>
        <mapping resource="com/xatu/entity/Student.hbm.xml"/>

    </session-factory>

</hibernate-configuration>
<?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.xatu.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" type="java.lang.String">
			<column name="gdesc"></column>
		</property>
		<!-- 配置单向的一对多关联关系 -->
		<set name="students" table="student">
			<!-- 指定关联的外键类 -->
			<key column="gid"></key>
			<one-to-many class="com.xatu.entity.Student"/>
		</set>
	</class>
</hibernate-mapping>

<?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.xatu.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" type="java.lang.String">
			<column name="sex"></column>
		</property>
	</class>
</hibernate-mapping>
package com.xatu.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(String gname, String gdesc) {
		//super();
		this.gname = gname;
		this.gdesc = gdesc;
	}
	public Grade() {

	}
	
}

package com.xatu.entity;

import java.io.Serializable;

public class Student implements Serializable {
	private int sid;
	private String sname;
	private String sex;
	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 Student(String sname, String sex) {
		super();
		this.sname = sname;
		this.sex = sex;
	}
	public Student(){
		
	}
}

package com.xatu.entity;

import java.util.Set;

import org.hibernate.Session;
import org.hibernate.Transaction;

import com.xatu.util.HibernateUtil;

public class Test {

	/**
	 * 单向一对多关联关系(班级--->学生)
	 */
	public static void main(String[] args) {
		//addStudent();
		//findStudentByGrade();
		//updateStudent();
		deleteStudent();
	}
	
	//添加学生
	public static void addStudent(){
		Grade g = new Grade("java一班", "软件开发专业");
		Student s1 = new Student("张三", "男");
		Student s2 = new Student("李四", "女");
		
		g.getStudents().add(s1);
		g.getStudents().add(s2);
		
		Session session = HibernateUtil.getSession();
		Transaction t = session.beginTransaction();
		
		session.save(g);
		session.save(s1);
		session.save(s2);
		t.commit();
		HibernateUtil.closeSession(session);
	}
	//从班级中查找学生
	public static void findStudentByGrade(){
		Session session = HibernateUtil.getSession(); //获取session对象
		Grade g = (Grade) session.get(Grade.class, 1); //获取班级信息
		System.out.println(g.getGname()+","+g.getGdesc());
		
		Set<Student> students = g.getStudents(); //获取班级学生信息,用集合保存
		for(Student stu:students){
			System.out.println(stu.getSname()+","+stu.getSex());
		}
	}
	//修改学生信息
	public static void updateStudent(){
		Grade g = new Grade("java二班", "软件维护专业");  //创建新的班级
		
		Session session = HibernateUtil.getSession();
		Transaction t = session.beginTransaction();   //开启事务
		
		Student stu = (Student) session.get(Student.class, 1);  //获取学号为1的学生信息
		g.getStudents().add(stu);
		session.save(g);
		t.commit();
		HibernateUtil.closeSession(session);
	}
	//删除学生
	public static void deleteStudent(){
		Session session = HibernateUtil.getSession();
		Transaction t = session.beginTransaction();
		
		Student stu = (Student) session.get(Student.class, 2);
		session.delete(stu);
		t.commit();
		HibernateUtil.closeSession(session);
	}
}



猜你喜欢

转载自blog.csdn.net/andy_96/article/details/79747186