实现Hibernate关联映射(富贵)

实现Hibernate关联映射

  1. 学生与身份证是一对一关联
  • IdCard.java
package com.ydy.entity;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToOne;
import javax.persistence.Table;

import org.hibernate.annotations.GenericGenerator;
import org.hibernate.annotations.Parameter;

@Entity
@Table(name="card")
public class IdCard {
	@Id
	@GeneratedValue(generator="aa")
	@GenericGenerator(name="aa",strategy="foreign",
	parameters={@Parameter(name="property",value="person")})
		      
	private Integer id;
	private String cardNo;
	@OneToOne(mappedBy="card")
	private Student student;
	
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getCardNo() {
		return cardNo;
	}
	public void setCardNo(String cardNo) {
		this.cardNo = cardNo;
	}
	public Student getStudent() {
		return student;
	}
	public void setStudent(Student student) {
		this.student = student;
	}
	@Override
	public String toString() {
		return "IdCard [id=" + id + ", cardNo=" + cardNo + ", student=" + student + "]";
	}


}
  • Student.java
package com.ydy.entity;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToOne;
import javax.persistence.PrimaryKeyJoinColumn;
import javax.persistence.Table;

import com.ydy.entity.IdCard;

@Entity
@Table(name="student")
public class Student {
	@Id
	@GeneratedValue(strategy=GenerationType.IDENTITY)
	private Integer id;
	private String name;
	@OneToOne(cascade=CascadeType.ALL)
	@PrimaryKeyJoinColumn(name="id")
	private IdCard card;
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public IdCard getCard() {
		return card;
	}
	public void setCard(IdCard card) {
		this.card = card;
	}
	@Override
	public String toString() {
		return "Student [id=" + id + ", name=" + name + ", card=" + card + "]";
	}


}
  • IdCard.hbm.xml
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping package="com.ydy.entity">
	<class name="IdCard" table="card" >
		<id name="id" column="id" >
			<generator class="foreign">
				<param name="property">student</param>
				
			</generator>
		</id>
		
	
		<property name="cardNo" column="cardNo" />
        <one-to-one name="student"  class="Student"  constrained="true"/>
		
	 
	</class>
</hibernate-mapping>
  • Student.hbm.xml
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping package="com.ydy.entity">
	<class name="Student" table="student_card" >
		<id name="id" column="id" >
			<generator class="native">
				
			</generator>
		</id>
		
	
		<property name="name" column="name" />
		<one-to-one name="card" cascade="all"></one-to-one>
      
		
	 
	</class>
</hibernate-mapping>
  • TestYdy.java
package com.ydy.ui;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;

import com.ydy.entity.IdCard;
import com.ydy.entity.Student;
import com.ydy.util.HibernateUtil;

public class TestYdy {
	/**
	 * 12.12 测试类(主键关联)--->主要测试程序功能实现情况
	 * 注意:<顺序>
	 * constrained="true"--->添加时先添加主表后添加从表,删除时反之。
	 */
	public TestYdy() {
		
	}

	public static void main(String[] args) {
//		  save();
		 update();
		// delete();
		
	}

	/*
	 * 
	 * 实现添加功能
	 */

	public static void save() {
		
		Configuration cfg=new Configuration().configure();
		SessionFactory factory=cfg.buildSessionFactory();
		Session session=factory.openSession();
		Transaction tran=session.beginTransaction();
		
		Student s=new Student();
		s.setName("张三");
		
		IdCard card=new IdCard();
		card.setCardNo("0001");
		
		card.setStudent(s);
		s.setCard(card);
		session.save(s);
		session.save(card);
		tran.commit();//提交
		session.close();
		factory.close();
		
		
	}

	/*
	 *   
	 * 实现删除功能
	 */
	 

	public static void delete() {
		Session session = null;
		Transaction tran = null;
		try {
			session = HibernateUtil.openSession();
			tran = session.beginTransaction();
			// ---------------------------------

			// 查找Person对象
			Student s = session.load(Student.class, 5);
			System.out.println(s.getCard().getCardNo());
			session.delete(s);
			

			// ---------------------------------
			tran.commit();
		} catch (Exception e) {
			e.printStackTrace();
			tran.rollback();
		} finally {
			if (null != session) {
				session.close();
			}
		}
	}

	 
	/*
	 * 实现修改功能
	 */
	 

	public static void update() {
		Session session = null;
		Transaction tran = null;
		try {
			session = HibernateUtil.openSession();
			tran = session.beginTransaction();
			// ---------------------------------

			// 查找Person对象
			Student s = session.load(Student.class, 1);
			s.setName("李四");//级联更新,在修改name的同时修改idcard;
			IdCard card=s.getCard();
			card.setCardNo("0002");
			s.setCard(card);
			session.update(s);
			// ---------------------------------
			tran.commit();
		} catch (Exception e) {
			e.printStackTrace();
			tran.rollback();
		} finally {
			if (null != session) {
				session.close();
			}
		}
	}


}
  • HibernateUtil.java
package com.ydy.util;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.boot.MetadataSources;
import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;

/**  
 * @Title:  HibernateUtil.java   
 * @Package com.ydy.util   
 * @Description:    描述   
 * @author: 太平洋醋王     
 * @date:   2019年11月4日 下午12:17:21   
 */

/**
 * 初始化Hibernate过程
 * Configuration、SessionFactory、Session对象
 */
public class HibernateUtil {
	public HibernateUtil() {
		// TODO Auto-generated constructor stub
	}
	
	   // SessionFactory实例(会话工厂)
    private static SessionFactory sessionFactory = null;
    //Configuration configuration = new Configuration();  
    
    /**
     * 静态初始化 Hibernate 
     */
    static {
        // 1 创建 StandardServiceRegistry 实例(标准注册服务)
        // 1.1 创建 StandardServiceRegistryBuilder 实例(标准注册服务生成器)
        // 1.2 从 hibernate.cfg.xml 配置文件中读取配置信息
        // 1.3 构建 StandardServiceRegistry实例(标准注册服务)
    	
        StandardServiceRegistry registry = new StandardServiceRegistryBuilder().configure().build();

        try {
            // 2 创建 SessionFactory 实例(会话工厂)
            // 2.1 根据标准注册服务创建一个  MetadataSources 实例(元数据资源集)
            // 2.2 构建元数据
            // 2.3 生成应用一般唯一的 SessionFactory 实例(会话工厂)
            sessionFactory = new MetadataSources(registry).buildMetadata().buildSessionFactory();
        } catch (Exception e) {
            // 2.4 创建失败手动释放 StandardServiceRegistry 实例
            StandardServiceRegistryBuilder.destroy(registry);
            e.printStackTrace();
        }
    }

    /**
     * 打开一个 Session 会话
     * @return Session
     */
    public static Session openSession() {
        return sessionFactory.openSession();
    }


}

  • Hibernate.cfg.xml
<?xml version="1.0" encoding="UTF-8"?>
<!--表明解析本XML文件的DTD文档位置,DTD是Document Type Definition 的缩写,即文档类型的定义,
 XML解析器使用DTD文档来检查XML文件的合法性。hibernate.sourceforge.net/hibernate-configuration-3.0dtd可以在Hibernate3.1.3软件包中的src\org\hibernate目录中找到此文件-->     
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
 <!--Hibernate配置文件的根元素,其他文件要包含在其中-->
 <hibernate-configuration>
 <!--SessionFactory是Hibernate中的一个类,这个类主要负责保存Hibernate的配置信息,以及对session的操作-->   
 <session-factory>
    <!--hibernate.dialect 只是Hibernate使用的数据库方言,就是要用Hibernate连接那种类型的数据库服务器。-->
  <property name="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
   <!--配置数据库的驱动程序,Hibernate在连接数据库时,需要用到数据库的驱动程序-->     
  <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
   <!--设置数据库的连接url:jdbc:mysql://localhost:3306/dbname,其中localhost表示mysql服务器名称,此处为本机,    dbname是数据库名-->      
  <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate?useUnicode=true&amp;characterEncoding=UTF-8&amp;useSSL=false&amp;serverTimezone=UTC</property>
  <!-- 连接数据库时数据的传输字符集编码方式 -->
  <property name="hibernate.connection.characterEncoding">UTF-8</property>
  <!--连接数据库时的用户名-->    
  <property name="hibernate.connection.username">root</property>
   <!--连接数据库时的密码-->     
  <property name="hibernate.connection.password">123456</property>
         
  <!--是否在后台显示Hibernate用到的SQL语句,开发时设置为true,便于差错,
          程序运行时可以在Eclipse的控制台显示Hibernate的执行Sql语句。项目部署后可以设置为false,提高运行效率-->    
  <property name="hibernate.show_sql">true</property>
  <!-- 格式化输出的Sql语句 -->
  <property name="hibernate.format_sql">true</property>
  <property name="hibernate.hbm2ddl.auto">update</property>  
   <!--指定映射文件,可映射多个映射文件--> 
   <!-- <mapping class="com.lll.entity.IdCard"/>
   <mapping class="com.lll.entity.Student"/> -->
   
  <mapping resource="com/lll/entity/IdCard.hbm.xml"/>
  <mapping resource="com/lll/entity/Student.hbm.xml"/>
</session-factory>
</hibernate-configuration> 

  1. 学生与角色是一对多关联
  • Role.java
package com.ydd.entity;

import java.util.HashSet;
import java.util.Set;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;

import org.hibernate.annotations.Cascade;

@Entity
@Table(name="role")
public class Role {
	
	private Integer id;//代理主键
	private String name;
	private Set<Student> students=new HashSet<Student>();//对应的员工的对象
	public Role(){
		
	}
	
	public Role(Integer id, String name) {
		
		this.id = id;
		this.name = name;
	}
	@Id
	@GeneratedValue(strategy=GenerationType.IDENTITY)
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	@Column(name="name")
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	@OneToMany(targetEntity=Student.class,mappedBy="role",cascade=CascadeType.ALL)
	
	public Set<Student> getStudents() {
		return students;
	}
	public void setStudents(Set<Student> students) {
		this.students = students;
	}
	@Override
	public String toString() {
		return "Role [id=" + id + ", name=" + name + "]";
	}
	

}
  • Student.java
package com.ydd.entity;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;

import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.Proxy;
//@Proxy(lazy=false)
@Entity
@Table(name="student")
public class Student {
	
	private Integer id;
	private String name;
	private String telephone;
	private Role role;
	public Student(){
		
	}
	public Student(String name, String telephone) {
		super();
		this.name = name;
		this.telephone = telephone;
	}
	@Id
	@GeneratedValue(strategy=GenerationType.IDENTITY)
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	@Column(name="name")
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	@Column(name="telephone")
	public String getTelephone() {
		return telephone;
	}
	public void setTelephone(String telephone) {
		this.telephone = telephone;
	}

	@ManyToOne
	@JoinColumn(name="rid")
	public Role getRole() {
		return role;
	}
	public void setRole(Role role) {
		this.role = role;
	}
	@Override
	public String toString() {
		return "Student [id=" + id + ", name=" + name + ", telephone=" + telephone 
				+ "]";
	}
	

}
  • Role.hbm.xml
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping package="com.ydd.entity">
	<class name="Role" table="role"  >
		<id name="id" column="id" >
			<generator class="identity">
				
			</generator>
		</id>
		<property name="name" column="name" >
		<!-- <column name="" sql-type=""></column> -->
		</property>
		<!--  inverse="true" lazy="true" outer-join="true" fetch="subselect" -->
		<set name="students" cascade="all" inverse="true">
		<!--inverse属性是谁维护外键(关联关系),是否放弃维护权,false:当前方维护外键,true:由对方维护外键,inverse="true"意思是让多方维护外键  -->
			<key  column="rid"></key>
			<one-to-many class="Student"/>
	    </set>
      
		
	 
	</class>
</hibernate-mapping>
  • Student,hbm.xml

<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping package="com.ydd.entity">
	<class name="Student" table="student" >
		<id name="id" column="id" >
			<generator class="identity">
				
			</generator>
		</id>
		
	
		<property name="name" column="name" />
        <property name="telephone" column="telephone"></property>
        <many-to-one name="role" column="rid" class="Role" outer-join="false" fetch="join"></many-to-one>
		<!-- many-to-one不提供inverse属性,默认是false;不能设置 -->
	 
	</class>
</hibernate-mapping>
  • TestYdd.java

  • HibernateUtil.java

package com.ydd.util;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.boot.MetadataSources;
import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;

/**
 * 初始化Hibernate过程
 * Configuration、SessionFactory、Session对象
 */
public class HibernateUtil {
	public HibernateUtil() {
		// TODO Auto-generated constructor stub
	}
	
	   // SessionFactory实例(会话工厂)
    private static SessionFactory sessionFactory = null;
    //Configuration configuration = new Configuration();  
    
    /**
     * 静态初始化 Hibernate 
     */
    static {
        // 1 创建 StandardServiceRegistry 实例(标准注册服务)
        // 1.1 创建 StandardServiceRegistryBuilder 实例(标准注册服务生成器)
        // 1.2 从 hibernate.cfg.xml 配置文件中读取配置信息
        // 1.3 构建 StandardServiceRegistry实例(标准注册服务)
    	
        StandardServiceRegistry registry = new StandardServiceRegistryBuilder().configure().build();

        try {
            // 2 创建 SessionFactory 实例(会话工厂)
            // 2.1 根据标准注册服务创建一个  MetadataSources 实例(元数据资源集)
            // 2.2 构建元数据
            // 2.3 生成应用一般唯一的 SessionFactory 实例(会话工厂)
            sessionFactory = new MetadataSources(registry).buildMetadata().buildSessionFactory();
        } catch (Exception e) {
            // 2.4 创建失败手动释放 StandardServiceRegistry 实例
            StandardServiceRegistryBuilder.destroy(registry);
            e.printStackTrace();
        }
    }

    /**
     * 打开一个 Session 会话
     * @return Session
     */
    public static Session openSession() {
        return sessionFactory.openSession();
    }


}

  • Hibernate.cfg.xml
<?xml version="1.0" encoding="UTF-8"?>
<!--表明解析本XML文件的DTD文档位置,DTD是Document Type Definition 的缩写,即文档类型的定义,
 XML解析器使用DTD文档来检查XML文件的合法性。hibernate.sourceforge.net/hibernate-configuration-3.0dtd可以在Hibernate3.1.3软件包中的src\org\hibernate目录中找到此文件-->     
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
 <!--Hibernate配置文件的根元素,其他文件要包含在其中-->
 <hibernate-configuration>
 <!--SessionFactory是Hibernate中的一个类,这个类主要负责保存Hibernate的配置信息,以及对session的操作-->   
 <session-factory>
    <!--hibernate.dialect 只是Hibernate使用的数据库方言,就是要用Hibernate连接那种类型的数据库服务器。-->
  <property name="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
   <!--配置数据库的驱动程序,Hibernate在连接数据库时,需要用到数据库的驱动程序-->     
  <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
   <!--设置数据库的连接url:jdbc:mysql://localhost:3306/dbname,其中localhost表示mysql服务器名称,此处为本机,    dbname是数据库名-->      
  <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate?useUnicode=true&amp;characterEncoding=UTF-8&amp;useSSL=false&amp;serverTimezone=UTC</property>
  <!-- 连接数据库时数据的传输字符集编码方式 -->
  <property name="hibernate.connection.characterEncoding">UTF-8</property>
  <!--连接数据库时的用户名-->    
  <property name="hibernate.connection.username">root</property>
   <!--连接数据库时的密码-->     
  <property name="hibernate.connection.password">123456</property>
         
  <!--是否在后台显示Hibernate用到的SQL语句,开发时设置为true,便于差错,
          程序运行时可以在Eclipse的控制台显示Hibernate的执行Sql语句。项目部署后可以设置为false,提高运行效率-->    
  <property name="hibernate.show_sql">true</property>
  <!-- 格式化输出的Sql语句 -->
  <property name="hibernate.format_sql">true</property>
  <property name="hibernate.hbm2ddl.auto">update</property>  
   <!--指定映射文件,可映射多个映射文件-->  
  <!-- <mapping class="com.ydd.entity.Role"/>
  <mapping class="com.ydd.entity.Student"/> -->
  <mapping resource="com/ydd/entity/Role.hbm.xml"/>
  <mapping resource="com/ydd/entity/Student.hbm.xml"/>
 
</session-factory>
</hibernate-configuration> 

  1. 学生与课程是多对多关联
  • Course.java
package com.ddd.entity;

import java.util.HashSet;
import java.util.Set;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.ManyToMany;
import javax.persistence.Table;

@Entity
@Table(name="courses")
public class Course {
	private Integer id;
	private String name;
	private Set<Student> students=new HashSet<Student>();
	@Id
	@GeneratedValue(strategy=GenerationType.IDENTITY)
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	@ManyToMany(mappedBy="courses")
	public Set<Student> getStudents() {
		return students;
	}
	public void setStudents(Set<Student> students) {
		this.students = students;
	}
	@Override
	public String toString() {
		return "Course [id=" + id + ", name=" + name + ", students=" + students + "]";
	}
	

}
  • Student.java
package com.ddd.entity;

import java.util.HashSet;
import java.util.Set;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.Table;
@Entity
@Table(name="students")
public class Student {
	private Integer id;
	private String name;
	private Set<Course> courses=new HashSet<Course>();
	@Id
	@GeneratedValue(strategy=GenerationType.IDENTITY)
	public Integer getId() {
		return id;
	}
	
	public void setId(Integer id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	@ManyToMany
	@JoinTable(name="students_course",joinColumns=@JoinColumn(name="sid")
	,inverseJoinColumns=@JoinColumn(name="cid"))
	public Set<Course> getCourses() {
		return courses;
	}
	public void setCourses(Set<Course> courses) {
		this.courses = courses;
	}
	@Override
	public String toString() {
		return "Student [id=" + id + ", name=" + name + ", courses=" + courses + "]";
	}
	

}

  • Course.hbm.xml

  • Student,hbm.xml


<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping package="com.ddd.entity">
	<class name="Student" table="m_student" >
		<id name="id" column="id" >
			<generator class="increment" />
		</id>
		<property name="name" column="name" />
		<set name="courses" table="m_student_course"  cascade="all">
			<key  column="sid"></key>
			<many-to-many class="Course" column="cid" ></many-to-many>
		</set>
	</class>
</hibernate-mapping>
  • TestDdd.java
package com.ddd.ui;

import java.util.Set;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;

import com.ddd.util.HibernateUtil;
import com.ddd.entity.Course;
import com.ddd.entity.Student;

public class TestDdd {
	/**
	 * 12.14 测试类--->主要测试程序功能实现情况
	 * 
	 */
	public TestDdd() {
		
	}

	public static void main(String[] args) {
		  save();
		 //update();
//		 delete();
		  //find();
		
	}
	public static void find() {
		Configuration cfg=new Configuration().configure();
		SessionFactory factory=cfg.buildSessionFactory();
		Session session=factory.openSession();
		Transaction tran=session.beginTransaction();
		
		Student student=session.get(Student.class, 1);
		System.out.println("当前用户是"+student.getName());
		Set<Course> courses=student.getCourses();
		for(Course course:courses){
			System.out.println(course.getName());
		}
		
		tran.commit();
		session.close();
		factory.close();
		
		
		
	}
	/*
	 * 
	 * 实现添加功能
	 */

	

	public static void save() {
		
		Configuration cfg=new Configuration().configure();
		SessionFactory factory=cfg.buildSessionFactory();
		Session session=factory.openSession();
		Transaction tran=session.beginTransaction();
		
		Student student1=new Student();
		student1.setName("小明");
		Student student2=new Student();
		student2.setName("小红");
		
		Course course1=new Course();
		course1.setName("JAVA");
		Course course2=new Course();
		course2.setName("C++");
		
		//建立关联
		student1.getCourses().add(course1);//由用户来维护关联,所以用户在前面
		student1.getCourses().add(course2);
//		role1.getStudent().add(student1);
//		role2.getStudent().add(student1);
		
		student2.getCourses().add(course1);
//		role1.getStudent().add(student2);
		
		session.save(student1);
		session.save(student2);
		session.save(course1);
		session.save(course1);
		tran.commit();
		session.close();
		factory.close();
		
		
	}

	/*
	 *   
	 * 实现删除功能
	 */
	 

	public static void delete() {
		Session session = null;
		Transaction tran = null;
		try {
			session = HibernateUtil.openSession();
			tran = session.beginTransaction();
			// ---------------------------------

			// 查找Person对象
			Student  student = session.load(Student.class, 2);
			System.out.println(student.getName());
			session.delete(student);
			

			// ---------------------------------
			tran.commit();
		} catch (Exception e) {
			e.printStackTrace();
			tran.rollback();
		} finally {
			if (null != session) {
				session.close();
			}
		}
	}

	 
	/*
	 * 实现修改功能
	 */
	 

	public static void update() {
		Session session = null;
		Transaction tran = null;
		try {
			session = HibernateUtil.openSession();
			tran = session.beginTransaction();
			// ---------------------------------

			// 查找Person对象
			Student  student = session.load(Student.class, 5);
			student.setName("zhangsan");
			session.update(student);
			// ---------------------------------
			tran.commit();
		} catch (Exception e) {
			e.printStackTrace();
			tran.rollback();
		} finally {
			if (null != session) {
				session.close();
			}
		}
	}

}
  • HibernateUtil.java
package com.ddd.util;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.boot.MetadataSources;
import org.hibernate.boot.registry.StandardServiceRegistry;
import org.hibernate.boot.registry.StandardServiceRegistryBuilder;

/**
 * 初始化Hibernate过程
 * Configuration、SessionFactory、Session对象
 */
public class HibernateUtil {
	public HibernateUtil() {
		// TODO Auto-generated constructor stub
	}
	
	   // SessionFactory实例(会话工厂)
    private static SessionFactory sessionFactory = null;
    //Configuration configuration = new Configuration();  
    
    /**
     * 静态初始化 Hibernate 
     */
    static {
        // 1 创建 StandardServiceRegistry 实例(标准注册服务)
        // 1.1 创建 StandardServiceRegistryBuilder 实例(标准注册服务生成器)
        // 1.2 从 hibernate.cfg.xml 配置文件中读取配置信息
        // 1.3 构建 StandardServiceRegistry实例(标准注册服务)
    	
        StandardServiceRegistry registry = new StandardServiceRegistryBuilder().configure().build();

        try {
            // 2 创建 SessionFactory 实例(会话工厂)
            // 2.1 根据标准注册服务创建一个  MetadataSources 实例(元数据资源集)
            // 2.2 构建元数据
            // 2.3 生成应用一般唯一的 SessionFactory 实例(会话工厂)
            sessionFactory = new MetadataSources(registry).buildMetadata().buildSessionFactory();
        } catch (Exception e) {
            // 2.4 创建失败手动释放 StandardServiceRegistry 实例
            StandardServiceRegistryBuilder.destroy(registry);
            e.printStackTrace();
        }
    }

    /**
     * 打开一个 Session 会话
     * @return Session
     */
    public static Session openSession() {
        return sessionFactory.openSession();
    }


}

  • Hibernate.cfg.xml
<?xml version="1.0" encoding="UTF-8"?>
<!--表明解析本XML文件的DTD文档位置,DTD是Document Type Definition 的缩写,即文档类型的定义,
 XML解析器使用DTD文档来检查XML文件的合法性。hibernate.sourceforge.net/hibernate-configuration-3.0dtd可以在Hibernate3.1.3软件包中的src\org\hibernate目录中找到此文件-->     
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
 <!--Hibernate配置文件的根元素,其他文件要包含在其中-->
 <hibernate-configuration>
 <!--SessionFactory是Hibernate中的一个类,这个类主要负责保存Hibernate的配置信息,以及对session的操作-->   
 <session-factory>
    <!--hibernate.dialect 只是Hibernate使用的数据库方言,就是要用Hibernate连接那种类型的数据库服务器。-->
  <property name="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
   <!--配置数据库的驱动程序,Hibernate在连接数据库时,需要用到数据库的驱动程序-->     
  <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
   <!--设置数据库的连接url:jdbc:mysql://localhost:3306/dbname,其中localhost表示mysql服务器名称,此处为本机,    dbname是数据库名-->      
  <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernate?useUnicode=true&amp;characterEncoding=UTF-8&amp;useSSL=false&amp;serverTimezone=UTC</property>
  <!-- 连接数据库时数据的传输字符集编码方式 -->
  <property name="hibernate.connection.characterEncoding">UTF-8</property>
  <!--连接数据库时的用户名-->    
  <property name="hibernate.connection.username">root</property>
   <!--连接数据库时的密码-->     
  <property name="hibernate.connection.password">123456</property>
         
  <!--是否在后台显示Hibernate用到的SQL语句,开发时设置为true,便于差错,
          程序运行时可以在Eclipse的控制台显示Hibernate的执行Sql语句。项目部署后可以设置为false,提高运行效率-->    
  <property name="hibernate.show_sql">true</property>
  <!-- 格式化输出的Sql语句 -->
  <property name="hibernate.format_sql">true</property>
  <property name="hibernate.hbm2ddl.auto">update</property>  
   <!--指定映射文件,可映射多个映射文件--> 
  <!-- <mapping class="com.ydy.entity.Course"/>
  <mapping class="com.ydy.entity.Student"/> -->
  <mapping resource="com/ddd/entity/Course.hbm.xml"/>
  <mapping resource="com/ddd/entity/Student.hbm.xml"/>
</session-factory>
</hibernate-configuration> 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值