JAVA Hibernate框架第2次作业 宁一健

编写代码实现Hibernate关联映射。 学生与学生学号是一对一关联;学生与角色是一对多关联;学生与课程是多对多关联。

下面是代码:

one to one

package com.entity;

public class Student {
	private Integer id;
	private String name;
	private StudentId studentid;
	
	public Student() {
	}
	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 StudentId getStudentid() {
		return studentid;
	}
	public void setStudentid(StudentId studentid) {
		this.studentid = studentid;
	}
	@Override
	public String toString() {
		return "Student [id=" + id + ", name=" + name + ", studentid=" + studentid + "]";
	}
	
	

}

package com.entity;

public class StudentId {
	private Integer id;
	private String idNo;
	private Student student;
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public String getIdNo() {
		return idNo;
	}
	public void setIdNo(String idNo) {
		this.idNo = idNo;
	}
	
	public Student getStudent() {
		return student;
	}
	public void setStudent(Student student) {
		this.student = student;
	}
	@Override
	public String toString() {
		return "StudentId [id=" + id + ", idNo=" + idNo + ", student=" + student + "]";
	}
	
	

}

<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.entity">
	<class name="Student" table="student">
		<id name="id" column="id">
			<generator class="native">
			<param name="native"></param>
			</generator>
		</id>
		<property name="name" column="name"></property>
		
		<one-to-one name="studentid" class="StudentId" cascade="all"></one-to-one>

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

<hibernate-mapping package="com.entity">
	<class name="StudentId" table="studentid">
		<id name="id" column="id">
		<generator class="foreign">
		<param name="property">student</param>
		
		</generator>
		</id>
		<property name="idNo" column="idNo"></property>
		
		<one-to-one name="student" class="Student" constrained="true"></one-to-one>
	</class>

</hibernate-mapping>

测试类

package com.test;

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

import com.entity.Student;
import com.entity.StudentId;
import com.util.HibernateUtil;
import com.util.HibernateUtils;

public class OtOTest {

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

	}

	private static void save() {
		Configuration configuration = new Configuration();
		configuration.configure();
		SessionFactory factory = configuration.buildSessionFactory();
		Session session = factory.openSession();
		Transaction tran = session.beginTransaction();
		
		Student s1=new Student();
		s1.setName("我");
		
		StudentId sid=new StudentId();
		sid.setIdNo("2222");
		sid.setStudent(s1);
		s1.setStudentid(sid);
		session.save(s1);
		tran.commit();
		session.close();
		factory.close();
		
	}

	private static void delete() {
		Session session = null;
		Transaction tran = null;
		try {
			session = HibernateUtils.getSession();
			tran = session.beginTransaction();

			Student student = session.get(Student.class, 7);
			session.delete(student);
			tran.commit();
		} catch (Exception e) {
			e.printStackTrace();
			tran.rollback();
		} finally {
			if (null != session) {
				session.close();
			}
		}
		
	}

	private static void update() {
		Session session = null;
		Transaction tran = null;
		try {
			session = HibernateUtils.getSession();
			tran = session.beginTransaction();

			// 查找Student对象
			Student student = session.load(Student.class, 6);
			student.setName("小红");
			StudentId studentid = student.getStudentid();
			studentid.setIdNo("0002");
			session.update(student);

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

	private static void find() {
		Session session = null;
		Transaction tran = null;
		try {
			session = HibernateUtils.getSession();
			tran = session.beginTransaction();
			
			Student student = session.load(Student.class, 13);
			System.out.println(student.getName());
			StudentId studentid = student.getStudentid();
			System.out.println(studentid.getIdNo());
			tran.commit();
		} catch (Exception e) {
			e.printStackTrace();
			tran.rollback();
		} finally {
			if (null != session) {
				session.close();
			}
		}
		
	}


}

one to many

package com.entity2;

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

public class Student {
	private Integer id;
	private String name;
	private Set<Role> roles=new HashSet<Role>();
	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 Set<Role> getRoles() {
		return roles;
	}
	public void setRoles(Set<Role> roles) {
		this.roles = roles;
	}
	@Override
	public String toString() {
		return "Student [roles=" + roles + "]";
	}
	
	

}

package com.entity2;

public class Role {
	private Integer id;
	private String name;
	private Student student;
	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 Student getStudent() {
		return student;
	}
	public void setStudent(Student student) {
		this.student = student;
	}
	@Override
	public String toString() {
		return "Role [id=" + id + ", name=" + name + ", student=" + student + "]";
	}
	

}

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

<hibernate-mapping package="com.entity2">
	<class name="Student" table="student2"  >
		<id name="id" column="id" >
			<generator class="identity">
				
			</generator>
		</id>
		<property name="name" column="name" >
		<!-- <column name="" sql-type=""></column> -->
		</property>
		<!--inverse属性是谁维护外键,维护关联关系,是否放弃维护权;false表示当前方维护外键  -->
		<!--  <set name="employees" inverse="true" lazy="true" outer-join="true" fetch="subselect">-->
		<set name="roles" cascade="all" inverse="true">
			<key  column="did"></key>
			<one-to-many class="Role"/>
	    </set>
      
		
	 
	</class>
</hibernate-mapping>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping package="com.entity2">
	<class name="Role" table="role" >
		<id name="id" column="id" >
			<generator class="identity">
				
			</generator>
		</id>
		
	
		<property name="name" column="name" />
        <!-- many-to-one不提供inverse属性 -->
        <many-to-one name="student" column="did" class="Student"></many-to-one>
		
	 
	</class>
</hibernate-mapping>

测试类

package com.test;

import java.util.Set;

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

import com.entity2.Student;
import com.entity2.Role;
import com.util.HibernateUtil;
import com.util.HibernateUtils;

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

	}

	private static void save() {
		Configuration configuration = new Configuration();
		configuration.configure();
		SessionFactory factory = configuration.buildSessionFactory();
		Session session = factory.openSession();
		Transaction tran = session.beginTransaction();
		
		Student s1=new Student();
		s1.setName("xiaohong");
		
		Role role1 = new Role();
		role1.setName("大学生");
		role1.setStudent(s1);
		Role role2 = new Role();
		role2.setName("小学生");
		role2.setStudent(s1);
		s1.getRoles().add(role1);
		s1.getRoles().add(role2);
		session.save(s1);
		tran.commit();
		session.close();
		factory.close();
		
	}

	private static void delete() {
		Session session = null;
		Transaction tran = null;
		try {
			session = HibernateUtils.getSession();
			tran = session.beginTransaction();
			
			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();
			}
		}
	

		
	}

	private static void update() {
		Session session = null;
		Transaction tran = null;
		try {
			session = HibernateUtils.getSession();
			tran = session.beginTransaction();

			// 查找Student对象
			Student student = session.load(Student.class, 3);
			student.setName("dapeng");
//			Role load = session.load(Role.class, 5);
//			Role load2 = session.load(Role.class, 6);
//			load.setName("学生");
//			load2.setName("学生");
			session.update(student);
			
			tran.commit();
		} catch (Exception e) {
			e.printStackTrace();
			tran.rollback();
		} finally {
			if (null != session) {
				session.close();
			}
		}
		
	}

	private static void find() {
		Session session = null;
		Transaction tran = null;
		try {
			session = HibernateUtils.getSession();
			tran = session.beginTransaction();
			// 查找Student对象
			Student student = session.load(Student.class, 3);
			System.out.println("当前用户是"+student.getName());
			Set<Role> roles =student.getRoles();
			for(Role role:roles){
				System.out.println(role.getName());
			}
			
			
			tran.commit();
		} catch (Exception e) {
			e.printStackTrace();
			tran.rollback();
		} finally {
			if (null != session) {
				session.close();
			}
		}
		
	}



}

many to many

package com.entity3;

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


public class Student {
	private Integer id;
	private String name;
	private Set<Course> courses =new HashSet<Course>();
	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 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 + "]";
	}
	

}

package com.entity3;

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

public class Course {
	private Integer id;
	private String name;
	private Set<Student> students=new HashSet<Student>();
	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 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 + "]";
	}
	

}

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

<hibernate-mapping package="com.entity3">
	<class name="Student" table="student3" >
		<id name="id" column="id" >
			<generator class="increment" />
		</id>
		<property name="name" column="name" />
		<set name="courses" table="students_courses" >
			<key  column="studentid"></key>
			<many-to-many class="Course" column="courseid" ></many-to-many>
		</set>
	</class>
</hibernate-mapping>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping package="com.entity3">
	<class name="Course" table="courses" >
		<id name="id" column="id" >
			<generator class="increment" />
		</id>
		<property name="name" column="name" />
		<set name="students" table="students_courses" inverse="true">
		
			<key  column="courseid"></key>
			<many-to-many class="Student" column="studentid" ></many-to-many>
		</set>
	</class>
</hibernate-mapping>

测试类

package com.test;

import java.util.Set;

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

import com.entity3.Student;
import com.entity3.Course;
import com.util.HibernateUtil;
import com.util.HibernateUtils;

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

	}

	private static void save() {
		Configuration configuration = new Configuration();
		configuration.configure();
		SessionFactory factory = configuration.buildSessionFactory();
		Session session = factory.openSession();
		Transaction tran = session.beginTransaction();
		
		Student s1 = new Student();
		Student s2 = new Student();
		s1.setName("绿");
		s2.setName("红");
		
		Course c1 = new Course();
		Course c2 = new Course();
		c1.setName("语");
		c2.setName("数");
		
		//建立关联
		s1.getCourses().add(c1);
		s1.getCourses().add(c2);
		s2.getCourses().add(c1);
		s2.getCourses().add(c2);
		
		session.save(s1);
		session.save(s2);
		session.save(c1);
		session.save(c2);
		tran.commit();
		session.close();
		factory.close();
		
	}

	private static void delete() {
		Session session = null;
		Transaction tran = null;
		try {
			session = HibernateUtils.getSession();
			tran = session.beginTransaction();

			// 查找Student对象
			Student student = session.get(Student.class, 3);
			System.out.println(student.getName());
			session.delete(student);
			tran.commit();
		} catch (Exception e) {
			e.printStackTrace();
			tran.rollback();
		} finally {
			if (null != session) {
				session.close();
			}
		}
		
	}

	private static void update() {
		Session session = null;
		Transaction tran = null;
		try {
			session = HibernateUtils.getSession();
			tran = session.beginTransaction();

			// 查找Student对象
//			Student student = session.load(Student.class, 4);
			Course course = session.load(Course.class, 6);
			course.setName("english");
//			student.setName("改改");
//			session.update(student);
			session.update(course);
			tran.commit();
		} catch (Exception e) {
			e.printStackTrace();
			tran.rollback();
		} finally {
			if (null != session) {
				session.close();
			}
		}
		
	}

	private static void find() {
		Session session = null;
		Transaction tran = null;
		try {
			session = HibernateUtils.getSession();
			tran = session.beginTransaction();
			// 查找Student对象
			Student student = session.load(Student.class, 4);
			System.out.println("这个学生是"+student.getName());
			Set<Course> courses = student.getCourses();
			for(Course course:courses){
				System.out.println(course.getName());
			}
			
			tran.commit();
		} catch (Exception e) {
			e.printStackTrace();
			tran.rollback();
		} finally {
			if (null != session) {
				session.close();
			}
		}
		
	}




}

通用工具类

package com.util;

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

//封装工具类
public class HibernateUtils {
	private static Configuration cfg;
	private static SessionFactory factory;
	private static Session session;
	static{
		cfg=new Configuration().configure();
		factory=cfg.buildSessionFactory();
	}
	//获取SessionFactory对象
	public static SessionFactory getSessionFactory(){
		return factory;
	}
	//获取Session对象
	public static Session getSession(){
		session=factory.openSession();
		return session;
	}
	public static void closeSession(Session session){
		if(null != session){
			session.close();
		}
	}

}

package com.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;
import org.hibernate.cfg.Configuration;
/**
 * 3.27
 * 初始化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();
//    }
    public static Session getCurrentSession(){
    	return sessionFactory.getCurrentSession();
    }

}

核心配置文件

<?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?characterEncoding=UTF-8</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 resource="com/entity/StudentId.hbm.xml"/>
   <mapping resource="com/entity/Studentoto.hbm.xml"/>
   <mapping resource="com/entity2/Studentotm.hbm.xml"/>
   <mapping resource="com/entity2/Role.hbm.xml"/>
   <mapping resource="com/entity3/Studentmtm.hbm.xml"/>
   <mapping resource="com/entity3/Coursemtm.hbm.xml"/>
</session-factory>
</hibernate-configuration> 




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值