麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

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

在Eclipse中使用Hibernate二(駔圖)

2019-11-18 12:57:32
字體:
供稿:網(wǎng)友

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

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

  
  要想測試配置文件是否可用,有一個(gè)又快又簡單的方法:使用向?qū)韯?chuàng)建一個(gè)影射文件。選擇文件(File) -> 新建(New) -> 其它(Other),選取Hibernate類別,然后再選Hibernate 影射文件,單擊下一步(Next)。向?qū)С霈F(xiàn)的時(shí)候,其中有些屬性已經(jīng)自動(dòng)填入了在配置文件中相應(yīng)屬性的值,單擊Refresh(確??梢酝ㄟ^這些信息和你的數(shù)據(jù)庫相連)。和數(shù)據(jù)庫連接后,會(huì)顯示庫中的表,這里只有一個(gè)TRACK表。第一次使用的時(shí)候,不知什么原因,需要你指定包含HSQLDB驅(qū)動(dòng)的.jar文件的路徑。好在你只需要指定一次。只要你認(rèn)為工作正常(譯者注:顯示了數(shù)據(jù)庫中有權(quán)限訪問的表),單擊Cancel。試驗(yàn)中使用已有的影射文件,不需要實(shí)際創(chuàng)建一個(gè)。
  
  生成代碼
  
  這可能是你一直在等待的部分。我們能用這個(gè)插件來做什么?好,馬上就開始。為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)生和該影射文檔相對應(yīng)的數(shù)據(jù)訪問對象。
  
 在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é)果。
  
  事情開始變得有趣,出現(xiàn)了兩個(gè)子包,一個(gè)是“base”的DAO,Hibernate Synchronizer所有,可以在任何時(shí)候重寫,一個(gè)是繼續(xù)那些DAO類的商業(yè)對象,不會(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 ,,無法訪問Mac OS X上的配置界面。針對該bug的一個(gè)補(bǔ)丁已經(jīng)做好了,但仍沒有發(fā)布。
  
  基于Hibernate Synchronizer網(wǎng)頁上的例子,和以下這個(gè)類一起,用那些新的數(shù)據(jù)訪問對象來試著把一些數(shù)據(jù)放入數(shù)據(jù)庫中??雌饋砗蜆?biāo)準(zhǔn)的Hibernate代碼生成工具生成的版本(在Hibernate: A Developer's Notebook一書的39-40頁)很相似,甚至更簡單一些。因?yàn)镠ibernate Synchronizer生成的類為你的每個(gè)數(shù)據(jù)庫操作都創(chuàng)建和提交一個(gè)新事務(wù),因此在與此類似的簡單情況下,你不需要自己來設(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è)簡單的程序,需要設(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,很合適。屏幕窗口看起來如圖19中所示,單擊運(yùn)行來在數(shù)據(jù)庫中創(chuàng)建一些數(shù)據(jù)。
  
 在Eclipse中使用Hibernate二(駔圖)(圖五)
  圖19 預(yù)備在Eclipse中運(yùn)行創(chuàng)建數(shù)據(jù)的測試程序

  
  假如你確實(shí)按照上邊說的來做,你會(huì)發(fā)現(xiàn)第一次的嘗試運(yùn)行失敗。Hibernate抱怨配置文件中連一個(gè)映射文件都沒有參考,為了運(yùn)行程序,至少需要一個(gè)這樣的文件。這也是為什么XMLBuddy在圖16底部用黃色下劃線發(fā)出警告??梢院茌p易修改該錯(cuò)誤,你只要在包資源瀏覽器(Package EXPlorer)中的Track.hbm.xml這個(gè)影射文檔上單擊右鍵,在Hibernate Synchronizer子菜單中選取Add Mapping Reference(如圖17中所示),這樣XMLBuddy就不會(huì)再抱怨XML文件有錯(cuò)誤,程序也可以繼續(xù)向前。不幸的是,沒有向前推進(jìn)我們所愿的那樣遠(yuǎn),下一個(gè)問題又出來了。Eclipse中顯示的下一個(gè)錯(cuò)誤是“不能在JNDI中找到JTA UserTransaction initial context”。不止我一個(gè)人犯這種錯(cuò)誤,因?yàn)樵赼 forum thread中有這樣的討論,而且到目前為止仍然沒有找到一個(gè)解決方法。
  
  既然我知道不需要使用JTA,我倒是很想知道為什么Hibernate竟然會(huì)使用JTA?打開Hibernate配置文件,如圖16所示,看看是不是Hibernate Synchronizer在其中加入了可疑的內(nè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)行沒有一點(diǎn)錯(cuò)誤,數(shù)據(jù)已經(jīng)保存到數(shù)據(jù)庫中。運(yùn)行 ant db 這個(gè)target(在Developer's Notebook一書的第一章有相應(yīng)的解釋)可以把表中所有的數(shù)據(jù)顯示出來(不可否認(rèn),這也許有點(diǎn)簡單),如圖20中所示。假如你跟著這篇文章中順序來做的,而不是跟著書中步驟一步一步來的,你需要先運(yùn)行ant schema來創(chuàng)建數(shù)據(jù)庫中的表,或是刪除以前試驗(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),然后在彈出對話框中選擇你要運(yùn)行的target,如圖21所示。這個(gè)功能很cool。
  
 在Eclipse中使用Hibernate二(駔圖)(圖七)
  圖21 在Eclipse中運(yùn)行Ant

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

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 国语自产免费精品视频在 | 欧美黄色视屏 | 国产成人精品一区二区视频免费 | 国产精品视频免费网站 | 一区www | 国产精品久久国产精麻豆96堂 | 日韩欧美精品中文字幕 | 中文欧美日韩 | 国产精品美女一区二区 | 黄网站在线免费 | 亚洲射情 | 中国黄色一级生活片 | 在线a亚洲视频播放在线观看 | 一级做a爱性色毛片免费1 | 欧美一区在线观看视频 | 精品黑人一区二区三区国语馆 | 久久爽久久爽久久av东京爽 | 国产一国产精品一级毛片 | 久久色网站 | 一级黄色性感片 | 久久精品99国产国产精 | 国产午夜精品理论片a级探花 | 色综合网在线观看 | 久久国产一级片 | 久色免费视频 | 国产精品一区二区三区在线播放 | 免费观看欧美一级片 | 水多视频在线观看 | 91短视频在线观看 | 久久精品小短片 | 免费黄色大片在线观看 | 日本不卡一区二区三区在线 | 精品久久久久久国产三级 | 国产羞羞网站 | 国产午夜精品久久久 | 国产一区二区三区四区精 | 成年人黄色免费网站 | 久久影院免费观看 | 美国黄色小视频 | 国产91久久精品一区二区 | av中文在线观看 |