blogjava's web log

          blogjava's web log
          ...

          hibernate 一對多測試-----筆記

          最近看那本深入淺出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.sourceforge.net/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.sourceforge.net/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,,成功了。數據也已經進數據庫了。。

          哈。。我是菜鳥。專家多指點啊。。

          posted on 2006-03-30 22:41 record java and net 閱讀(847) 評論(0)  編輯  收藏 所屬分類: java

          導航

          常用鏈接

          留言簿(44)

          新聞檔案

          2.動態語言

          3.工具箱

          9.文檔教程

          友情鏈接

          搜索

          最新評論

          主站蜘蛛池模板: 张家界市| 平武县| 华容县| 岑溪市| 眉山市| 商都县| 江津市| 苏尼特右旗| 五原县| 和龙市| 水富县| 伊宁市| 南开区| 浮梁县| 长岛县| 桦甸市| 台安县| 巴林左旗| 正定县| 阳城县| 凤山市| 嘉鱼县| 尚义县| 綦江县| 临猗县| 青海省| 安溪县| 香河县| 凯里市| 临汾市| 南部县| 台湾省| 乳源| 调兵山市| 华池县| 斗六市| 图们市| 扬中市| 宁化县| 灯塔市| 临西县|