映射-- 多对多(老师与学生)

来源:互联网 发布:jsp和java web的区别 编辑:程序博客网 时间:2024/05/01 14:20

学生类:

Java代码  收藏代码
  1. package dao.po;  
  2.   
  3. import java.util.Set;  
  4.   
  5. /** 
  6.  * @author zl 学生类 
  7.  */  
  8. public class Student  
  9. {  
  10.     private int             id;  
  11.   
  12.     private String          name;  
  13.   
  14.     private Set<Teacher>  teachers;  
  15. }  

 

老师类:

Java代码  收藏代码
  1. package dao.po;  
  2.   
  3. import java.util.Set;  
  4.   
  5. /** 
  6.  * @author zl 老师类 
  7.  */  
  8. public class Teacher  
  9. {  
  10.     private int             id;  
  11.   
  12.     private String          name;  
  13.   
  14.     private Set<Student>  students;  
  15. }  

    伦理片 http://www.dotdy.com/

两个映射文件 :

Xml代码  收藏代码
  1. <?xml version="1.0"?>  
  2. <!DOCTYPE hibernate-mapping PUBLIC   
  3.     "-//Hibernate/Hibernate Mapping DTD 3.0//EN"  
  4.     "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">  
  5. <hibernate-mapping   
  6.     package="dao.po">  
  7.   
  8.     <class name="Student">          
  9.         <id name="id">  
  10.             <generator class="native"/>  
  11.         </id>       
  12.         <property name="name" not-null="true" length="255" column="`name`"/>  
  13.           
  14.         <!-- name="teachers" 表示:Student类中有一个属性叫teachers (是Set集合)-->  
  15.         <!-- table="teacher_student" 表示:中间表表名叫teacher_student -->           
  16.         <set name="teachers" table="teacher_student">  
  17.           
  18.             <!-- column="student_id" 表示:中间表teacher_student的字段-->  
  19.             <!-- Student类的id与中间表teacher_student的字段student_id对应-->  
  20.             <key column="student_id"/>              
  21.               
  22.             <!-- column="teacher_id" 表示:中间表teacher_student的字段-->  
  23.             <!-- class="Teacher" 表示:中间表teacher_student的字段teacher_id与 Teacher类的id对应-->  
  24.             <many-to-many class="Teacher" column="teacher_id"/>  
  25.         </set>  
  26.     </class>  
  27.       
  28. </hibernate-mapping>  

 

Xml代码  收藏代码
  1. <?xml version="1.0"?>  
  2. <!DOCTYPE hibernate-mapping PUBLIC   
  3.     "-//Hibernate/Hibernate Mapping DTD 3.0//EN"  
  4.     "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">  
  5. <hibernate-mapping   
  6.     package="dao.po">  
  7.   
  8.     <class name="Teacher">          
  9.         <id name="id">  
  10.             <generator class="native"/>  
  11.         </id>       
  12.         <property name="name" not-null="true" length="255" column="`name`"/>  
  13.                   
  14.         <set name="students" table="teacher_student">  
  15.             <key column="teacher_id"/>              
  16.             <many-to-many class="Student" column="student_id"/>  
  17.         </set>  
  18.     </class>  
  19.       
  20. </hibernate-mapping>  

 

 

保存操作,  查询就不说了:

Java代码  收藏代码
  1. package dao;  
  2.   
  3. import java.util.HashSet;  
  4. import java.util.Set;  
  5.   
  6. import org.hibernate.Session;  
  7. import org.hibernate.Transaction;  
  8.   
  9. import dao.po.Student;  
  10. import dao.po.Teacher;  
  11.   
  12. public class Many2Many  
  13. {  
  14.   
  15.     /** 
  16.      * @param args 
  17.      */  
  18.     public static void main(final String[] args)  
  19.     {  
  20.         add();  
  21.     }  
  22.   
  23.     /** 
  24.      * 添加几个老师与学生 
  25.      */  
  26.     public static void add()  
  27.     {  
  28.         final Teacher t1 = new Teacher();  
  29.         t1.setName("语文老师");  
  30.   
  31.         final Teacher t2 = new Teacher();  
  32.         t2.setName("数学老师");  
  33.   
  34.         final Student s1 = new Student();  
  35.         s1.setName("学生小明");  
  36.   
  37.         final Student s2 = new Student();  
  38.         s2.setName("学生小红");  
  39.   
  40.         //      final Set<Teacher> set_t = new HashSet<Teacher>();  
  41.         //      set_t.add(t1);  
  42.         //      set_t.add(t2);  
  43.   
  44.         final Set<Student> set_s = new HashSet<Student>();  
  45.         set_s.add(s1);  
  46.         set_s.add(s2);  
  47.   
  48.         //给老师set 学生  
  49.         t1.setStudents(set_s); //建立关联,只在一方面建立关联就行了, 不可给学生set()了老师,再老师set()了学生  
  50.         t2.setStudents(set_s); //建立关联,只在一方面建立关联就行了, 不可给学生建了关联,再老师建关联  
  51.   
  52.         //给学生set 老师  
  53.         //不可以再做  
  54.   
  55.         Session session = null;  
  56.         try  
  57.         {  
  58.             session = HibernateUtil.getSeesion();  
  59.             final Transaction tx = session.beginTransaction();  
  60.             session.save(t1);  
  61.             session.save(t2);  
  62.             session.save(s1);  
  63.             session.save(s2);  
  64.   
  65.             tx.commit();  
  66.   
  67.         }  
  68.         finally  
  69.         {  
  70.             if (session != null)  
  71.             {  
  72.                 session.close();  
  73.             }  
  74.         }  
  75.     }  
  76.   
  77. }  
  78. // 中间表teacher_student 表结构如下 :  
  79. //| teacher_student | CREATE TABLE `teacher_student` (  
  80. //  `teacher_id` int(11) NOT NULL,  
  81. //  `student_id` int(11) NOT NULL,  
  82. //  PRIMARY KEY  (`student_id`,`teacher_id`),  
  83. //  KEY `FK2E2EF2DE4BF3A147` (`teacher_id`),  
  84. //  KEY `FK2E2EF2DE3B5856A7` (`student_id`),  
  85. //  CONSTRAINT `FK2E2EF2DE3B5856A7` FOREIGN KEY (`student_id`) REFERENCES `student  
  86. //` (`id`),  
  87. //  CONSTRAINT `FK2E2EF2DE4BF3A147` FOREIGN KEY (`teacher_id`) REFERENCES `teacher  
  88. //` (`id`)  
  89. //) ENGINE=InnoDB DEFAULT CHARSET=utf8 |  

 

 

0 0