Hibernate关联映射

拿来的表为班级表1---n学生表,在这次的测试主键我用的是序列,创建代码如下:

  1. drop table classes;  
  2. create table classes(  
  3.        cid int primary key,  
  4.        cname varchar2(50)  
  5. );  
  6.   
  7. drop sequence seq_classes_cid;  
  8. create sequence seq_classes_cid  
  9.        START WITH 1000    -- 从1000开始计数   
  10.        INCREMENT BY 1     -- 每次加1个  
  11.   
  12. --学生表  
  13. drop table student;  
  14. create table student(  
  15.        sid int primary key,  
  16.        sname varchar2(50),  
  17.        cid int constraint FK_student_cid references classes(cid)  
  18. );  
  19.   
  20. drop sequence seq_student_sId;  
  21. create sequence seq_student_sId  
  22.        START WITH 1000    -- 从1000开始计数   
  23.        INCREMENT BY 1     -- 每次加1个  

cfg文件

  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE hibernate-configuration PUBLIC  
  3.         "-//Hibernate/Hibernate Configuration DTD 3.0//EN"  
  4.         "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">  
  5. <hibernate-configuration>  
  6.     <session-factory>  
  7.         <property name="connection.username">hibernate</property>  
  8.         <property name="connection.password">a</property>  
  9.         <property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property>  
  10.         <property name="connection.url">jdbc:oracle:thin:@localhost:1521:orcl</property>  
  11.         <!-- 方言 -->  
  12.         <property name="dialect">org.hibernate.dialect.OracleDialect</property>  
  13.   
  14.         <!-- 是否在运行的时候显示sql语句 -->  
  15.         <property name="show_sql">true</property>  
  16.         <!-- 显示的sql语句是否进行排版 -->  
  17.         <property name="format_sql">true</property>  
  18.         <!-- 表结构生成策略 -->  
  19.         <property name="hbm2ddl.auto">update</property>  
  20.         <!-- getCurrentSession所需的参数(本地事务) -->  
  21.         <property name="hibernate.current_session_context_class">thread</property>  
  22.   
  23.     </session-factory>  
  24. </hibernate-configuration>  

学生和班级实体类

  1. package com.yc.entity;  
  2.   
  3. import java.io.Serializable;  
  4.   
  5. public class Student implements Serializable{  
  6.     private static final long serialVersionUID = 3914237588346266940L;  
  7.   
  8.     private int sid;  
  9.     private String sname;  
  10.   
  11.     public Student() {  
  12.     }  
  13.     public Student(String sname) {  
  14.         this.sname = sname;  
  15.     }  
  16.     public Student(int sid, String sname) {  
  17.         this.sid = sid;  
  18.         this.sname = sname;  
  19.     }  
  20.   
  21.     public int getSid() {  
  22.         return sid;  
  23.     }  
  24.     public void setSid(int sid) {  
  25.         this.sid = sid;  
  26.     }  
  27.     public String getSname() {  
  28.         return sname;  
  29.     }  
  30.     public void setSname(String sname) {  
  31.         this.sname = sname;  
  32.     }  
  33.   
  34.     public String toString() {  
  35.         return "Student [sid=" + sid + ", sname=" + sname + "]";  
  36.     }  
  37. }  

  1. package com.yc.entity;  
  2.   
  3. import java.io.Serializable;  
  4. import java.util.HashSet;  
  5. import java.util.Set;  
  6.   
  7. public class Classes implements Serializable {  
  8.     private static final long serialVersionUID = 948637569053708320L;  
  9.   
  10.     private int cid;  
  11.     private String cname;  
  12.     //在一方定义一个多方的集合 一对多  
  13.     private Set<Student> students=new HashSet<Student>();  
  14.   
  15.     public Classes() {  
  16.   
  17.     }  
  18.     public Classes(String cname) {  
  19.         this.cname = cname;  
  20.     }  
  21.     public Classes(int cid, String cname, Set<Student> students) {  
  22.         this.cid = cid;  
  23.         this.cname = cname;  
  24.         this.students = students;  
  25.     }  
  26.   
  27.     public int getCid() {  
  28.         return cid;  
  29.     }  
  30.     public void setCid(int cid) {  
  31.         this.cid = cid;  
  32.     }  
  33.     public String getCname() {  
  34.         return cname;  
  35.     }  
  36.     public void setCname(String cname) {  
  37.         this.cname = cname;  
  38.     }  
  39.     public Set<Student> getStudents() {  
  40.         return students;  
  41.     }  
  42.     public void setStudents(Set<Student> students) {  
  43.         this.students = students;  
  44.     }  
  45.   
  46.     public String toString() {  
  47.         return "Classes [cid=" + cid + ", cname=" + cname + ", students="  
  48.                 + students + "]";  
  49.     }  
  50. }  
根据实体类创建对应的hbm文件
Student.hbm.xml
  1. <?xml version="1.0"?>  
  2. <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"  
  3. "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">  
  4. <!-- Generated 2016-8-12 19:33:30 by Hibernate Tools 3.4.0.CR1 -->  
  5. <hibernate-mapping>  
  6.     <class name="com.yc.entity.Student" table="STUDENT">  
  7.         <id name="sid" type="int">  
  8.             <column name="SID" />  
  9.             <generator class="sequence" >  
  10.                 <param name="sequence">seq_student_sId</param>  
  11.             </generator>  
  12.         </id>  
  13.         <property name="sname" type="java.lang.String">  
  14.             <column name="SNAME" />  
  15.         </property>  
  16.     </class>  
  17. </hibernate-mapping>  
Classes.hbm.xml
  1. <?xml version="1.0"?>  
  2. <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"  
  3. "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">  
  4. <!-- Generated 2016-8-12 19:33:30 by Hibernate Tools 3.4.0.CR1 -->  
  5. <hibernate-mapping>  
  6.     <class name="com.yc.entity.Classes" table="CLASSES">  
  7.         <id name="cid" type="int">  
  8.             <column name="CID" />  
  9.             <generator class="sequence" >  
  10.                 <param name="sequence">seq_classes_cid</param>  
  11.             </generator>  
  12.         </id>  
  13.         <property name="cname" type="java.lang.String">  
  14.             <column name="CNAME" />  
  15.         </property>  
  16.         <!-- 配置单向的一对多关联关系 -->  
  17.         <set name="students" table="STUDENT" inverse="false" lazy="true">  
  18.             <!-- 指定关联的外键列 -->  
  19.             <key>  
  20.                 <column name="CID" />  
  21.             </key>  
  22.             <one-to-many class="com.yc.entity.Student" />  
  23.         </set>  
  24.     </class>  
  25. </hibernate-mapping>  

在cfg文件中加入映射路径

  1. <!-- 测试一对多 -->  
  2. <mapping resource="Classes.hbm.xml" />  
  3. <mapping resource="Student.hbm.xml" />  

编写测试类测试

  1. package com.yc.test;  
  2.   
  3. import java.util.Collections;  
  4.   
  5. import org.hibernate.Session;  
  6. import org.hibernate.Transaction;  
  7. import org.junit.Test;  
  8.   
  9. import com.yc.entity.Classes;  
  10. import com.yc.entity.Student;  
  11. import com.yc.utils.HibernateUtil;  
  12.   
  13. public class MyTest {  
  14.   
  15.     @Test  
  16.     //插入数据的测试  
  17.     public void testAdd() {  
  18.         Classes c=new Classes("理工");  
  19.   
  20.         Student s1=new Student("张三");  
  21.         Student s2=new Student("李四");  
  22.   
  23.         //如果希望在学生表中添加对应的班级编号,需要在班级中添加学生,建立关联关系  
  24.         Collections.addAll(c.getStudents(), s1,s2);  
  25.   
  26.         Session session=HibernateUtil.getSession();  
  27.         Transaction transaction=session.beginTransaction();  
  28.   
  29.         session.save(c);  
  30.         session.save(s1);  
  31.         session.save(s2);  
  32.   
  33.         transaction.commit();  
  34.         HibernateUtil.closeSession(session);  
  35.     }  
  36.   
  37.     @Test  
  38.     //查询班级中包含的学生  
  39.     public void testFind() {  
  40.         Session session=HibernateUtil.getSession();  
  41.         Classes c=(Classes) session.get(Classes.class1000);  
  42.         //建立关联关系后,可以方便的从一个对象导航到另一个对象  
  43.         System.out.println(c);  
  44.     }  
  45.   
  46.     @Test  
  47.     //修改学生信息  
  48.     public void testUpdate() {  
  49.         Classes c=new Classes("小淘气");  
  50.   
  51.         Session session=HibernateUtil.getSession();  
  52.         Transaction transaction=session.beginTransaction();  
  53.   
  54.         Student s=(Student) session.get(Student.class1001);  
  55.         c.getStudents().add(s);  
  56.   
  57.         session.save(c);  
  58.   
  59.         transaction.commit();  
  60.         HibernateUtil.closeSession(session);  
  61.     }  
  62.   
  63.     @Test  
  64.     //删除  
  65.     public void testDelete() {  
  66.         Session session=HibernateUtil.getSession();  
  67.         Transaction transaction=session.beginTransaction();  
  68.   
  69.         Student s=(Student) session.get(Student.class1000);  
  70.         session.delete(s);  
  71.   
  72.         transaction.commit();  
  73.         HibernateUtil.closeSession(session);  
  74.     }  
  75. }  

测试结果,testAdd方法的测试结果

结束。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值