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();
    }

}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值