天之狼子

          Java技術

          統計

          留言簿(1)

          Other Blogers

          我的鏈接

          閱讀排行榜

          評論排行榜

          在JJpStudy中使用Hibernate

          JJp 的基本數據是于伶的《學日語背單詞 1.0 》所帶的 japan.mdb 中的單詞表和《新版標準日本語》詞匯表( Excel ),而我學過的數據庫系統是 Oracle mysql 。在這些格式中轉換需要很大的工作量,我寫了幾個 Java 類來做轉換,還沒有做完整。同學說,使用 Hibernate 可以避免這個問題,并且可以可以很快的封裝數據層,所以決定用她了。

          ?

          Hibernate3.0 中文參考手冊大致瀏覽了一下,然后使用 MyEclipse 的工具配置并生成了實體類,初次使用,感覺非常棒!下面介紹一下配置過程。

          首先得有數據庫,這里使用 Mysql5.0 Hibernate 也可以自動生成 Schema ,但是已經有數據庫(由 PowerDesigner9.5 生成)和數據(從 japan.mdb Excel 導入)了,所以沒那么做,今后有機會再研究一下。 JJp 數據庫結構如下:

          vocabulary.GIF
          ??? 首先,在
          MyEclipse 里配置數據庫連接。在 Pereferences MyEclipse 下有一個 Database Explorer 選項里配置 Mysql 驅動程序“ MySQL Connector/J Driver ”,主要是選擇 mysql-connector-java-5.0.0-beta jar 包,如果成功,驅動名稱前面會出現對號。

          然后,將項目轉換為 Hibernate 兼容。方法是右鍵點擊項目名稱,在 MyEclipse 里選擇“ Add Hibernate Capabilites ”。這時會出現對話框,依次選擇庫文件夾 Library Folder 、配置文件路徑 Configuration Folder 并自動創建 Session 工廠類(用于獲取 Hibernate Session ),成功之后,出現 hibernate.cfg.xml 配置工具。

          接下來是配置 hibernate.cfg.xml 。數據庫連接選擇 JDBC 并使用 MySQL Connector/J Driver 創建一個 profile ,右邊參數里添加一個 show-sql 設為 true. 。配置文件如下:

          < hibernate-configuration >
          < session-factory >
          ????
          < property? name ="myeclipse.connection.profile" > jjp </ property >
          ????
          < property? name ="connection.url" >
          ????????jdbc:mysql://localhost/jjp
          ????
          </ property >
          ????
          < property? name ="connection.username" > root </ property >
          ????
          < property? name ="connection.password" > password </ property >
          ????
          < property? name ="connection.driver_class" >
          ????????com.mysql.jdbc.Driver
          ????
          </ property >
          ????
          < property? name ="dialect" > org.hibernate.dialect.MySQLDialect </ property >
          ????
          < property? name ="show_sql" > true </ property >
          </ session-factory >
          </ hibernate-configuration >

          ??? 下一步是添加 Mapping( 數據庫表與 Java 實體類的映射 ) 。打開 Database Explorer 視圖,建立一個數據庫連接,這里還是使用上面的 MySQL Connector/J Driver ,如果驅動沒設置好,相關的操作都不會成功。然后連接到數據庫上,展開 Tables ,右鍵某個表,選擇 生成映射 Generate hibernate mapping ;選擇實體類位置和 ID 生成器為“ sequence ”即可。將所有表的映射生成完畢,自動配置就結束了。這時 hibernate.cfg.xml 如下:

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

          <! DOCTYPE?hibernate-configuration?PUBLIC
          ??????????"-//Hibernate/Hibernate?Configuration?DTD?3.0//EN"
          ??????????"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"
          >
          <!-- ?Generated?by?MyEclipse?Hibernate?Tools.??????????????????? -->
          < hibernate-configuration >
          < session-factory >
          ???? <!-- ?

          ????<property?name="connection.useUnicode">true</property>

          ????<property?name="connection.characterEncoding">GBK</property>??

          ????
          --> ??

          ????
          < property? name ="myeclipse.connection.profile" > jjp </ property >

          ????
          < property? name ="connection.url" > jdbc:mysql://localhost/jjp?characterEncoding=gbk </ property >

          ????
          < property? name ="connection.username" > root </ property >

          ????
          < property? name ="connection.password" > password </ property >

          ????
          < property? name ="connection.driver_class" >

          ???????com.mysql.jdbc.Driver

          ????
          </ property >

          ????
          < property? name ="dialect" >

          ???????org.hibernate.dialect.MySQLDialect

          ????
          </ property >
          ??
          < property? name ="connection.pool_size" > 10 </ property >

          ????
          < property? name ="show_sql" > true </ property >
          ??????<
          mapping? resource ="jjp/db/configs/Word.hbm.xml" ? />
          ??????<
          mapping? resource ="jjp/db/configs/Form.hbm.xml" ? />
          ????? <
          mapping? resource ="jjp/db/configs/Derivation.hbm.xml" ? />
          ????? <
          mapping? resource ="jjp/db/configs/RWordForm.hbm.xml" ? />
          ????? <
          mapping? resource ="jjp/db/configs/RWordDerivation.hbm.xml" ? />
          </ session-factory >
          </
          hibernate-configuration >

          實體類映射配置文件中以 Word.hbm.xml 為例:

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

          <! DOCTYPE?hibernate-mapping?PUBLIC

          ????????????????????????????"-//Hibernate/Hibernate?Mapping?DTD?3.0//EN"

          ????????????????????????????"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"?
          >
          <!-- ?DO?NOT?EDIT:?This?is?a?generated?file?that?is?synchronized? -->

          <!-- ?by?MyEclipse?Hibernate?tool?integration.??????????????????? -->

          <!-- ?Created?Sat?Mar?11?15:33:08?CST?2006????????????????????????? -->

          < hibernate-mapping? package ="jjp.db" >

          ????
          < class? name ="Word" ?table ="word" >

          ????????
          < id? name ="wordId" ?column ="word_id" ?type ="long" >

          ????????????
          < generator? class ="increment" />

          ????????
          </ id >

          ????????
          < property? name ="hiragana" ?column ="hiragana" ?type ="string" ? />

          ????????
          < property? name ="chinese" ?column ="chinese" ?type ="string" ? />

          ????????
          < property? name ="mean" ?column ="mean" ?type ="string" ? />

          ????????
          < property? name ="example" ?column ="example" ?type ="string" ? />

          ????????
          < set? name ="RWordDerivationSet" ?inverse ="true" >

          ????????????
          < key? column ="word_id" />

          ????????????
          < one-to-many? class ="RWordDerivation" />

          ????????
          </ set > ?

          ????????
          < set? name ="RWordFormSet" ?inverse ="true" >

          ????????????
          < key? column ="word_id" />

          ????????????
          < one-to-many? class ="RWordForm" />

          ????????
          </ set >
          ????
          </ class >
          </ hibernate-mapping >

          ??? 如果沒有特殊要求,

          hibernate配置 方面的工作都結束了。下面介紹一下如何使用 hibernate

          使用 Session 工廠類 HibernateSessionFactory 的方法 currentSession() 取得一個 Session ,然后就可以通過 Session 對數據庫進行各種操作了。例如, JJp 中詞匯表類 Vocabulary 取得所有單詞的方法 getWords() 可以這樣寫:

          public ?Collection?getWords()? {
          ????????
          if ?(words? != ? null )
          ????????????
          return ?words;
          ????????Session?session?
          = ?HibernateSessionFactory.currentSession();
          ????????Transaction?tx?
          = ?session.beginTransaction();
          ????????Collection?result?
          = ?session.createQuery( " from?Word " ).list();
          ????????tx.commit();
          ????????HibernateSessionFactory.closeSession();
          ????????
          return ?result;
          }

          ?

          其中 session.createQuery("from Word") ”from Word” HQL HQL 使用方法請查看 hibernate 參考手冊

          HQL 方面有一個中文問題,下面代碼

          ????????????? Collection result = session.createQuery(

          ??????????????????????????? "from Word where chinese LIKE '%" + hiragana + "%'").list();

          其中的 hiragana 在自動生成 SQL 語句的時候被轉換成亂碼,在網上查找,據說是 hibernate 版本的問題,但是網上的解決方法我沒有成功,現在用了一個替代方案。

          上面是 JJp 中使用 hibernate 的簡要介紹。

          現在 JJp 開發工具是 JDK1.5.0.6+Eclipse3.1.1+MyEclipse4.0.0.1GA+JBuilder2006 ,其他工具有 PowerDesigner9.5+ MysqlMigrationTool+RationalRose2002 等,數據庫有 Access2003+Excel2003+Mysql5.0.19+Oracle9i

          posted on 2006-03-13 22:59 北方蒼狼 閱讀(419) 評論(0)  編輯  收藏 所屬分類: JJpStudy


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 日喀则市| 余干县| 无棣县| 八宿县| 白沙| 凌源市| 和龙市| 平阴县| 桑日县| 子长县| 措勤县| 桃江县| 澄迈县| 五莲县| 汝城县| 漳州市| 灵丘县| 拜城县| 增城市| 莱芜市| 定州市| 宁陕县| 平邑县| 昌都县| 佛山市| 新晃| 南城县| 礼泉县| 庆元县| 阿克| 龙岩市| 湄潭县| 富蕴县| 含山县| 宁远县| 隆安县| 沅陵县| 华蓥市| 扶绥县| 香格里拉县| 都昌县|