国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

在Eclipse中使用Hibernate二(駔圖)

2019-11-18 12:57:32
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

  添加Driver Class 的方法有點(diǎn)希奇,你需要單擊Browse按鈕,然后開(kāi)始輸入driver的類名(譯者注:你需要確定該driver類在該工程的類路徑中)。假如你輸入"jdbcD",窗口就會(huì)出現(xiàn)這個(gè)選擇,很輕易就可以從中選取一個(gè)。具體如圖15所示。
  
 在Eclipse中使用Hibernate二(駔圖)(圖一)
  圖15 指定HSQLDB的driver類

  
  只要添加如圖14中那些屬性值就可以。完成后單擊Finish來(lái)完成創(chuàng)建配置文件。Hibernate Synchronizer 現(xiàn)在已經(jīng)可以開(kāi)始使用了。完成創(chuàng)建文件后,配置文件會(huì)打開(kāi),這時(shí)候你就可以看看Hibernate xml格式的配置文件的結(jié)構(gòu)和細(xì)節(jié)。
  
 在Eclipse中使用Hibernate二(駔圖)(圖二)
  圖16 生成的配置文件

  
  要想測(cè)試配置文件是否可用,有一個(gè)又快又簡(jiǎn)單的方法:使用向?qū)?lái)創(chuàng)建一個(gè)影射文件。選擇文件(File) -> 新建(New) -> 其它(Other),選取Hibernate類別,然后再選Hibernate 影射文件,單擊下一步(Next)。向?qū)С霈F(xiàn)的時(shí)候,其中有些屬性已經(jīng)自動(dòng)填入了在配置文件中相應(yīng)屬性的值,單擊Refresh(確保可以通過(guò)這些信息和你的數(shù)據(jù)庫(kù)相連)。和數(shù)據(jù)庫(kù)連接后,會(huì)顯示庫(kù)中的表,這里只有一個(gè)TRACK表。第一次使用的時(shí)候,不知什么原因,需要你指定包含HSQLDB驅(qū)動(dòng)的.jar文件的路徑。好在你只需要指定一次。只要你認(rèn)為工作正常(譯者注:顯示了數(shù)據(jù)庫(kù)中有權(quán)限訪問(wèn)的表),單擊Cancel。試驗(yàn)中使用已有的影射文件,不需要實(shí)際創(chuàng)建一個(gè)。
  
  生成代碼
  
  這可能是你一直在等待的部分。我們能用這個(gè)插件來(lái)做什么?好,馬上就開(kāi)始。為Hibernate影射文檔提供一個(gè)新的菜單條目。
  
  右擊(假如是單鍵鼠標(biāo),在按住Control鍵的同時(shí)點(diǎn)鼠標(biāo)鍵)一個(gè)影射文檔,菜單條目中會(huì)顯示幾個(gè)和Hibernate相關(guān)的選擇(如圖17所示),其中有一個(gè)和synchronize有關(guān),這是一個(gè)手工方法,可以讓Hibernate Synchronizer產(chǎn)生和該影射文檔相對(duì)應(yīng)的數(shù)據(jù)訪問(wèn)對(duì)象。
  
 在Eclipse中使用Hibernate二(駔圖)(圖三)
  圖17 Synchronizer插件為影射文檔提供的幾個(gè)菜單項(xiàng)

  
  Add Mapping Reference 選項(xiàng)也很有用,當(dāng)你單擊該項(xiàng)時(shí),會(huì)把相應(yīng)的影射文件增加到Hibernate配置文件中,表明該文件是影射文檔,因此你不需要在源代碼中增加任何信息要求相應(yīng)的影射文件進(jìn)行設(shè)置。現(xiàn)在讓我們看看選取Synchronize Files后的結(jié)果。
  
  事情開(kāi)始變得有趣,出現(xiàn)了兩個(gè)子包,一個(gè)是“base”的DAO,Hibernate Synchronizer所有,可以在任何時(shí)候重寫,一個(gè)是繼續(xù)那些DAO類的商業(yè)對(duì)象,不會(huì)被覆蓋,也就給了我們一個(gè)機(jī)會(huì),可以在其中加入商業(yè)邏輯(具體如圖18中所示)。
  
 在Eclipse中使用Hibernate二(駔圖)(圖四)
  圖18 同步后的DAO,圖中顯示的是我們可以編輯的子類

  
  和Hibernate的代碼生成工具相比,用該插件生成了更多的類。這是優(yōu)點(diǎn),也可能是一些潛在的缺點(diǎn),將在Trade-Offs 部分進(jìn)行討論。你可以在工程配置文件中選取要生成的類和它們所在的包的結(jié)構(gòu)。我可以證實(shí)這點(diǎn),但現(xiàn)在的發(fā)行版有個(gè)bug ,,無(wú)法訪問(wèn)Mac OS X上的配置界面。針對(duì)該bug的一個(gè)補(bǔ)丁已經(jīng)做好了,但仍沒(méi)有發(fā)布。
  
  基于Hibernate Synchronizer網(wǎng)頁(yè)上的例子,和以下這個(gè)類一起,用那些新的數(shù)據(jù)訪問(wèn)對(duì)象來(lái)試著把一些數(shù)據(jù)放入數(shù)據(jù)庫(kù)中。看起來(lái)和標(biāo)準(zhǔn)的Hibernate代碼生成工具生成的版本(在Hibernate: A Developer's Notebook一書的39-40頁(yè))很相似,甚至更簡(jiǎn)單一些。因?yàn)镠ibernate Synchronizer生成的類為你的每個(gè)數(shù)據(jù)庫(kù)操作都創(chuàng)建和提交一個(gè)新事務(wù),因此在與此類似的簡(jiǎn)單情況下,你不需要自己來(lái)設(shè)置事務(wù)(當(dāng)然,假如你需要把一組操作作為一個(gè)單獨(dú)事務(wù),有很多方法可以做到這點(diǎn))這里是新版本的代碼。
  
  package com.oreilly.hh;import java.sql.Time;
  import java.util.Date;import net.sf.hibernate.HibernateException;
  import com.oreilly.hh.dao.TrackDAO;import com.oreilly.hh.dao._RootDAO;
  /** * Try creating some data using the Hibernate Synchronizer apPRoach.
  */public class CreateTest2 {
  public static void main(String[] args) throws HibernateException {
  // Load the configuration file
  _RootDAO.initialize();
  // Create some sample data
  TrackDAO dao = new TrackDAO();
  Track track = new Track("Russian Trance", "vol2/album610/track02.mp3",
  Time.valueOf("00:03:30"), new Date(), (short)0);
  dao.save(track);
  track = new Track("Video Killed the Radio Star",
  "vol2/album611/track12.mp3", Time.valueOf("00:03:49"), new Date(),
  (short)0);
  dao.save(track);
  // We don't even need a track variable, of course:
  dao.save(new Track("Gravity's Angel", "/vol2/album175/track03.mp3",
  Time.valueOf("00:06:06"), new Date(), (short)0));
  }}
  
  當(dāng)我寫這個(gè)的時(shí)候,有Eclipse在手邊真是太好了 ,我已經(jīng)忘了當(dāng)寫書中例子的時(shí)候多么想念智能代碼完成功能,有另外幾件事情JDT也發(fā)揮了作用。
  
  為了在Eclipse中運(yùn)行這個(gè)簡(jiǎn)單的程序,需要設(shè)置一個(gè)新的運(yùn)行配置。用CreateTest2.java作為當(dāng)前文件,選擇運(yùn)行(Run )-> 運(yùn)行...(Run...)。然后單擊新建(New),因?yàn)樵擃愑幸粋€(gè)main() 方法,Eclipse推斷出要運(yùn)行該工程的當(dāng)前類。Eclipse為新的運(yùn)行配置取的名字,CreateTest2,很合適。屏幕窗口看起來(lái)如圖19中所示,單擊運(yùn)行來(lái)在數(shù)據(jù)庫(kù)中創(chuàng)建一些數(shù)據(jù)。
  
 在Eclipse中使用Hibernate二(駔圖)(圖五)
  圖19 預(yù)備在Eclipse中運(yùn)行創(chuàng)建數(shù)據(jù)的測(cè)試程序

  
  假如你確實(shí)按照上邊說(shuō)的來(lái)做,你會(huì)發(fā)現(xiàn)第一次的嘗試運(yùn)行失敗。Hibernate抱怨配置文件中連一個(gè)映射文件都沒(méi)有參考,為了運(yùn)行程序,至少需要一個(gè)這樣的文件。這也是為什么XMLBuddy在圖16底部用黃色下劃線發(fā)出警告。可以很輕易修改該錯(cuò)誤,你只要在包資源瀏覽器(Package EXPlorer)中的Track.hbm.xml這個(gè)影射文檔上單擊右鍵,在Hibernate Synchronizer子菜單中選取Add Mapping Reference(如圖17中所示),這樣X(jué)MLBuddy就不會(huì)再抱怨XML文件有錯(cuò)誤,程序也可以繼續(xù)向前。不幸的是,沒(méi)有向前推進(jìn)我們所愿的那樣遠(yuǎn),下一個(gè)問(wèn)題又出來(lái)了。Eclipse中顯示的下一個(gè)錯(cuò)誤是“不能在JNDI中找到JTA UserTransaction initial context”。不止我一個(gè)人犯這種錯(cuò)誤,因?yàn)樵赼 forum thread中有這樣的討論,而且到目前為止仍然沒(méi)有找到一個(gè)解決方法。
  
  既然我知道不需要使用JTA,我倒是很想知道為什么Hibernate竟然會(huì)使用JTA?打開(kāi)Hibernate配置文件,如圖16所示,看看是不是Hibernate Synchronizer在其中加入了可疑的內(nèi)容。看了配置文件后,可以確定,有一些行看起來(lái)是罪魁禍?zhǔn)祝?br />  <property name="hibernate.transaction.factory_class">
  net.sf.hibernate.transaction.JTATransactionFactory
  </property>
  <property name="jta.UserTransaction">
  java:comp/UserTransaction </property>
  
  一旦把那些行變成注釋后,再次運(yùn)行程序。這次,也就是第三次運(yùn)行成功。我在自己計(jì)算機(jī)上運(yùn)行沒(méi)有一點(diǎn)錯(cuò)誤,數(shù)據(jù)已經(jīng)保存到數(shù)據(jù)庫(kù)中。運(yùn)行 ant db 這個(gè)target(在Developer's Notebook一書的第一章有相應(yīng)的解釋)可以把表中所有的數(shù)據(jù)顯示出來(lái)(不可否認(rèn),這也許有點(diǎn)簡(jiǎn)單),如圖20中所示。假如你跟著這篇文章中順序來(lái)做的,而不是跟著書中步驟一步一步來(lái)的,你需要先運(yùn)行ant schema來(lái)創(chuàng)建數(shù)據(jù)庫(kù)中的表,或是刪除以前試驗(yàn)留下的數(shù)據(jù)。
  
 在Eclipse中使用Hibernate二(駔圖)(圖六)
  圖20 在Eclipse中運(yùn)行Ant

  
  你可以在Eclipse內(nèi)運(yùn)行Ant的target,方法是用右鍵單擊包資源瀏覽器(Package Explorer)中的build.xml 文件,選擇菜單中的運(yùn)行Ant(Run Ant),然后在彈出對(duì)話框中選擇你要運(yùn)行的target,如圖21所示。這個(gè)功能很cool。
  
 在Eclipse中使用Hibernate二(駔圖)(圖七)
  圖21 在Eclipse中運(yùn)行Ant

  
  查詢數(shù)據(jù)相當(dāng)簡(jiǎn)單、直白,即使Hibernate Synchronizer產(chǎn)生了很多輔助方法來(lái)使用指定查詢,我認(rèn)為這些沒(méi)有什么用處,都是運(yùn)行查詢,然后返回包含結(jié)果的列表,而不是返回一個(gè)Query對(duì)象,讓你直接使用該對(duì)象。這使你不能使用任何Query提供的、方便的、類型安全(type-safe)的參數(shù)設(shè)置方法,因?yàn)檫@個(gè),我打算讓_RootDAO對(duì)象提供一個(gè)session對(duì)象,可以用“老式”的方法來(lái)使用Hibernate。公平來(lái)說(shuō),我認(rèn)為假如編輯Hibernate Synchronizer 用來(lái)生成代碼所使用的模板,就可以生成想要的任何方法,假如有一個(gè)項(xiàng)目,要用到該插件,可以肯定我會(huì)試著這么做。
  
  實(shí)際上,進(jìn)一步考慮,當(dāng)你得到一個(gè)活動(dòng)的Session時(shí),你只能使用Query,而這些DAO對(duì)象已經(jīng)提供為相應(yīng)功能最佳的實(shí)現(xiàn)。假如你和我在例子中使用查詢的方法一樣,那就需要你自己來(lái)實(shí)現(xiàn)session治理。你能夠把session治理內(nèi)嵌于你自己所寫的那一半DAO中,這樣可以給你提供兩方面的好處。(譯者注:和有base的java POJO對(duì)象一樣,對(duì)于DAO,該插件也生成一對(duì)類,一個(gè)base DAO給該插件用,一個(gè)是繼續(xù)該base DAO的自定義DAO,你可以在其中添加商業(yè)邏輯)。這也是Hibernate Synchronizer把類分隔開(kāi)來(lái)如此有用的另一個(gè)原因。對(duì)該插件的遠(yuǎn)見(jiàn)在下邊做了一點(diǎn)研究
  
  不管怎么說(shuō),下邊是我第一次使用的代碼,和書中48-49頁(yè)上的代碼功能

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 甘洛县| 泉州市| 新疆| 英德市| 汕尾市| 弋阳县| 治县。| 甘谷县| 乌兰浩特市| 漾濞| 揭东县| 时尚| 驻马店市| 太原市| 桦南县| 黑河市| 视频| 斗六市| 安顺市| 古丈县| 泊头市| 子长县| 林州市| 平泉县| 三门县| 盐津县| 无极县| 盈江县| 吕梁市| 射阳县| 黑河市| 宜兴市| 延津县| 平罗县| 元谋县| 英吉沙县| 萨嘎县| 庆安县| 昌吉市| 容城县| 阳山县|