hibernate manytomany

本文介绍了如何利用Hibernate框架在Java中实现学生与课程的多对多关系,包括建表、实体类设计、配置文件设置及测试类编写,通过实例演示了如何操作数据库。

hibernate多对多例子-方便以后查看(三)

1.建表

  create    table  student
(sid   varchar (  32 )   not    null    primary    key ,
 sname   varchar (  16 ),
 sage   varchar (  16 ),
)

  create    table  course
(cid   varchar (  32 )   not    null    primary    key ,
cname   varchar (  16 )
)

  create    table  student_course_link
(sid   varchar (  32 )   not    null ,
cid   varchar (  32 )   not    null ,
  primary    key (sid,cid)
)
2.写VO
StudentVO
package com.test;
import java.util.Set;
public  class Student
{
    private String sid;
    private String sname;
    private String sage;

    private Set course;
    public Student()
    {
    }

   //写上get set
Course vo
package com.test;

import java.util.Set;

public  class Course
{
    private String cid;
    private String cname;
    private Set student;
   //写上get set

写配置文件
Student.hbm.xml
<? xml version="1.0" ?>
<! DOCTYPE hibernate-mapping
    PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd" >

< hibernate-mapping >

     < class  name ="com.test.Student"  table ="student"   >

         < id  name ="sid"  type ="string"  unsaved-value ="null"   >
             < column  name ="sid"  sql-type ="char(32)"  not-null ="true" />
             < generator  class ="uuid.hex" />
         </ id >

         < property  name ="sname" >
             < column  name ="sname"  sql-type ="varchar(16)"  not-null ="true" />
         </ property >

         < property  name ="sage" >
             < column  name ="sage"  sql-type ="varchar(16)"  not-null ="true" />
         </ property >

         < set  name ="course"  table ="student_course_link"  cascade ="all"  outer-join ="false" >
             < key  column ="sid" />
             < many-to-many  class ="com.test.Course"  column ="cid" />
         </ set >
   
     </ class >

</ hibernate-mapping >

Course.hbm.xml
<? xml version="1.0" ?>
<! DOCTYPE hibernate-mapping
    PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd" >

< hibernate-mapping >

     < class  name ="com.test.Course"  table ="course"   >

         < id  name ="cid"  type ="string"  unsaved-value ="null"   >
             < column  name ="cid"  sql-type ="char(32)"  not-null ="true" />
             < generator  class ="uuid.hex" />
         </ id >

         < property  name ="cname" >
             < column  name ="cname"  sql-type ="varchar(16)"  not-null ="true" />
         </ property >

         < set  name ="student"  table ="student_course_link"  lazy ="false"  cascade ="all" >
             < key  column ="cid" />
             < many-to-many  class ="com.test.Student"  column ="sid" />
         </ set >
   
     </ class >

</ hibernate-mapping >

接着把下面的hibernate.properties文件拷到classes目录下。。这里用的是mysql
hibernate.query.substitutions true 1, false 0, yes 'Y', no 'N'
## MySQL
hibernate.dialect net.sf.hibernate.dialect.MySQLDialect
hibernate.connection.driver_class org.gjt.mm.mysql.Driver
hibernate.connection.url jdbc:mysql://localhost:3306/wjcms
hibernate.connection.username root
hibernate.connection.password wujun
hibernate.connection.pool_size 1
hibernate.proxool.pool_alias pool1
hibernate.show_sql true
hibernate.jdbc.batch_size 0
hibernate.max_fetch_depth 1
hibernate.cache.use_query_cache true 
写测试类了..
package com.test;

import net.sf.hibernate.Session;
import net.sf.hibernate.SessionFactory;
import net.sf.hibernate.cfg.Configuration;
import net.sf.hibernate.*;
import java.util.Set;
import java.util.HashSet;
import java.sql.*;
import java.util.List;
import java.util.Iterator;

public  class TestManyToMany
{
    SessionFactory sf;
    Session session;
    public TestManyToMany()
    {
        try
        {
            Configuration cfg = new Configuration();
            sf = cfg.addClass(Student.class).addClass(Course.class).buildSessionFactory();
        }

        catch(HibernateException ex)
        {
            ex.printStackTrace();
        }

    }

    public void doCreate()
    {
        try
        {
            session = sf.openSession();

            Student student = new Student();
            student.setSname("小王");
            student.setSage("22");

            Set courseSet = new HashSet();
            Course course = null;
            for(int i=0;i<2;i++)
            {
                course = new Course();
                if(i==0)
                    course.setCname("c++");
                else if(i==1)
                    course.setCname("java");
                courseSet.add(course);
            }

            student.setCourse(courseSet);
            
            session.save(student);
            session.flush();
            session.connection().commit();

        }

        catch(HibernateException ex)
        {
            ex.printStackTrace();
        }

        catch(SQLException ex1)
        {
            ex1.printStackTrace();
        }

        finally
        {
                try{
                    session.close();
                }

                catch(HibernateException ex2){
                }

        }


    }

    public void doQuery()
    {
        try{
            session = sf.openSession();
            Query q = session.createQuery("select s from Student as s");
            List l = q.list();
            Student s = null;
            Course course = null;
            for(int i=0;i<l.size();i++)
            {
                s = (Student)l.get(i);
                System.out.println("姓名: "+s.getSname());
                System.out.println("年龄: "+s.getSage());
                System.out.println("所选的课程:");
                Iterator it = s.getCourse().iterator();
                while(it.hasNext())
                {
                    course = (Course)it.next();
                    System.out.println("课程名: "+course.getCname());
                }



            }


        }

        catch(HibernateException ex){
            ex.printStackTrace();
        }

        finally{
            try{
                session.close();
            }

            catch(HibernateException ex2){
            }

        }

    }

    public static void main(String[] args)
    {
        TestManyToMany t = new TestManyToMany();
        //t.doCreate();
        t.doQuery();
    }

}

 

好。。可以了。。

转载于:https://www.cnblogs.com/jerome-rong/archive/2012/05/31/2528656.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值