分享

hibernate 一对多测试-----笔记

 不会游泳的鱼 2006-04-06

最近看那本深入浅出hibernate 真是很不错啊。。讲的也很细。。
刚刚小试了一把,真的很过隐。。
我用的是MYSQL数据库

表结构。
1:文章表

CREATE   TABLE  `t_article` (
  `a_id` 
int ( 11 NOT   NULL  auto_increment,
  `a_sort` 
int ( 11 NOT   NULL   default   0 ,
  `a_title` 
varchar ( 50 default   NULL ,
  `a_body` 
text ,
  `a_author` 
varchar ( 11 default   ‘‘ ,
  `a_hit` 
int ( 11 NOT   NULL   default   0 ,
  `c_id` 
int ( 11 default   0 ,
  `a_date` 
varchar ( 20 default   NULL ,
  
PRIMARY   KEY   (`a_id`)

2:评论表

CREATE   TABLE  `t_remark` (
  `r_id` 
int ( 11 NOT   NULL  auto_increment,
  `a_id` 
int ( 11 NOT   NULL   default   0 ,
  `r_name` 
varchar ( 20 NOT   NULL   default   ‘‘ ,
  `r_title` 
varchar ( 50 default   ‘‘ ,
  `r_body` 
varchar ( 100 default   NULL ,
  `r_email` 
varchar ( 30 default   NULL ,
  `r_date` 
varchar ( 30 default   NULL ,
  
PRIMARY   KEY   (`r_id`),
  
KEY  `a_id` (`a_id`)
)

表结构我直接导出来的。。
表建好了。接下来写vo 类了..

这是文章表的VO

package  wjjcms.vo;
import  java.util. * ;

public   class  articleVO  {
    
private   int  a_id;
    
private   int  a_sort;
    
private   int  a_hit;
    
private   int  c_id;
    
private  String a_title;
    
private  String a_body;
    
private  String a_author;
    
private  String a_date;
    
private  Set a_remark;
    
    
public  articleVO()  {
    }


   
// 自己写上get set 方法。。我就不贴上来了

评论表的。

package  wjjcms.vo;

public   class  remarkVO  {
    
private   int  a_id;
    
private   int  r_id;
    
private  String r_name;
    
private  String r_title;
    
private  String r_body;
    
private  String r_email;
    
private  String r_date;
    
public  remarkVO()  {
    }
       //get set 方法自己加上。。

接下来 写映射文件了..
我用的是hibernate.properties 文件连接数据库。


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

该文件记的放在classes目录下面。。

<? xml version="1.0" encoding="UTF-8" ?>

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

    
< class  name ="wjjcms.vo.articleVO"  table ="t_article"   >


    
< id  name ="a_id"  column ="a_id"  unsaved-value ="0"   >
      
< generator  class ="native" />
 
</ id >
     
< property  name ="c_id"     column ="c_id" />
     
< property  name ="a_title"  column ="a_title" />
     
< property  name ="a_sort"   column ="a_sort" />
     
< property  name ="a_date"   column ="a_date" />
     
< property  name ="a_body"   column ="a_body" />
     
< property  name ="a_hit"    column ="a_hit" />
     
< property  name ="a_author"  column ="a_author" />
        
< set  name ="a_remark"  cascade ="all"  outer-join ="true" >
            
< key  column ="a_id" />
            
< one-to-many  class ="wjjcms.vo.remarkVO"   />
        
</ set >
    
  
</ class >

</ hibernate-mapping >

配置文件 那些字段 属性是什么意思。。你到首页搜索一下,很多的 。

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

< hibernate-mapping >

    
< class  name ="wjjcms.vo.remarkVO"  table ="t_remark"   >

    
< id  name ="r_id"  column ="r_id"  unsaved-value ="0"   >
      
< generator  class ="native" />  
   
</ id >

      
< property  name ="r_name"  column ="r_name"   />
    
< property  name ="r_email"  column ="r_email"   />
    
< property  name ="r_title"  column ="r_title"   />
    
< property  name ="r_body"  column ="r_body"   />
    
< property  name ="r_date"  column ="r_date"   />
     
< property  name ="a_id"  column ="a_id"   />
    
</ class >

</ hibernate-mapping >


其实这些都是可以自动生成的。。你去看看http://blog.csdn.net/javamxj/category/111072.aspx
他讲的很详细。。

一切都准备好了。。该写个类来小试一下了。。

package  wjjcms.test;

import  junit.framework. * ;
import  net.sf.hibernate.cfg. * ;
import  net.sf.hibernate. * ;
import  wjjcms.vo.remarkVO;
import  wjjcms.vo.articleVO;
import  java.sql.SQLException;
import  java.util. * ;

public   class  TestText  extends  TestCase  {

    
private  SessionFactory sessionFactory;
    
private  Session ss  =   null ;
    
public  TestText(String name)  {
        
super (name);
    }


    
/*
     junit中setUp方法在TestCase初试化的时候会自动调用
     一般用来初试化公共资源。。
     这里用来初试化Hibernate Session
    
*/

    
protected   void  setUp()  throws  Exception  {
        Configuration config 
=   new  Configuration();
        config.addClass(articleVO.
class ).addClass(remarkVO. class );
        sessionFactory 
=  config.buildSessionFactory();
        ss 
=  sessionFactory.openSession();
    }

    
/*
    * 这个方法junit TestCase执行完毕时,会自动调用tearDown方法。
    * 一般用于释放资源,我这里是关闭在setUp()方法里打开的Session
    
*/

    
protected   void  tearDown()  throws  Exception  {
        
try   {
            ss.close();
        }
  catch  (HibernateException ex)  {
            ex.printStackTrace();
        }

    }

    
// 测试添加一篇文章
     public   void  testAddArticle()  throws  Exception  {
        
try   {
            wjjcms.vo.articleVO vo 
=   new  articleVO();
            vo.setA_author(
" wujunjun " );
            vo.setA_body(
" 热爱祖国,坚决抗日! " );
            vo.setA_date(
" 2006-3-30 " );
            vo.setA_hit(
33 );
            vo.setA_sort(
1 );
            vo.setA_title(
" 小日本鬼子 " );
            vo.setC_id(
1 );
            ss.save(vo);
            ss.flush();
            ss.connection().commit();
            ss.close();
        }
  catch  (HibernateException ex)  {
            
// junit.framework.Assert.
            System.out.print(ex.getMessage());
        }

    }


    
// 测试添加一篇评论
     public   void  testAddRemark()  throws  Exception  {
        
try   {
            wjjcms.vo.remarkVO vo 
=   new  remarkVO();
            vo.setR_body(
" 有是你个小日本。。。。 " );
            vo.setR_date(
" 2006-1-1 " );
            vo.setA_id(
1 );
            vo.setR_email(
" wujun1866@gmail.com " );
            vo.setR_name(
" wujunjun " );
            vo.setR_title(
" re:小日本,打的好 " );
            ss.save(vo);
            ss.flush();
            ss.connection().commit();
          
        }
  catch  (HibernateException ex)  {
            System.out.print(ex.getMessage());
        }

    }

    
// 测试同时添加一骗文章和5篇评论
     public   void  testAddAll()
    
{
        wjjcms.vo.articleVO vo 
=   new  articleVO();
        vo.setA_author(
" wujunjun " );
        vo.setA_body(
" 热爱祖国,坚决抗日! " );
        vo.setA_date(
" 2006-3-30 " );
        vo.setA_hit(
33 );
        vo.setA_sort(
1 );
        vo.setA_title(
" 小日本鬼子 " );
        vo.setC_id(
1 );

             Set remarkSet
= new  HashSet();
             
for ( int  i = 0 ;i < 5 ;i ++ )
             
{
                 wjjcms.vo.remarkVO reVO 
=   new  remarkVO();
                 reVO.setR_body(
" 有是你个小日本。。。。 " );
                 reVO.setR_date(
" 2006-1-1 " );
                 reVO.setA_id(
1 );
                 reVO.setR_email(
" wujun1866@gmail.com " );
                 reVO.setR_name(
" wujunjun " );
                 reVO.setR_title(
" re:小日本,打的好 " );
                 remarkSet.add(reVO);
             }

       vo.setA_remark(remarkSet);
       
try
       
{
           ss.save(vo);
           ss.flush();
           ss.connection().commit();
       }

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

       
    }

    
// 测试显示文章。。和评论。。
     public   void  testShowArticle()  throws  SQLException, HibernateException  {
        Query q 
=  ss.createQuery( " from articleVO where c_id=? " );
        q.setInteger(
0 1 );
        List l 
=  q.list();
        
for  ( int  i  =   0 ; i  <  l.size(); i ++ {
            articleVO showVO 
=  (articleVO) l.get(i);
            System.out.print(showVO.getA_author());
            System.out.print(showVO.getA_title());
            java.util.Iterator it 
=  showVO.getA_remark().iterator();
            
while  (it.hasNext())  {
                remarkVO reVO 
=  (remarkVO) it.next();
                System.out.print(reVO.getR_email());
                System.out.print(reVO.getR_title());
            }

        }

    }

}



运行一下看看。

 
OK,,成功了。数据也已经进数据库了。。

哈。。我是菜鸟。专家多指点啊。。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约