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

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

在Java SE中使用Hibernate框架

2019-11-18 15:40:01
字體:
供稿:網(wǎng)友

  目前人們很輕易發(fā)現(xiàn)Hibernate正迅速的成為流行的J2EE的O/R映射工具和數(shù)據(jù)集成框架(假如不是最流行的)。Hibernate為企業(yè)應(yīng)用開發(fā)者操作關(guān)系數(shù)據(jù)庫的提供了清楚明了而又強(qiáng)大的工具。
然而假如你需要在外部訪問那些包裝在J2EE web應(yīng)用里的實(shí)體,情況又怎樣呢?你的開發(fā)跟應(yīng)用獨(dú)立分開,卻又相同的實(shí)體以訪問你的數(shù)據(jù)嗎?又或者你得編寫附加的web組件來治理對數(shù)據(jù)的內(nèi)部訪問嗎?

  在很多情況下,這些問題都會出現(xiàn)。我的情況是我的公司需要將來自多個(gè)供給商,有著多種文件格式的記錄導(dǎo)入到數(shù)據(jù)庫里。我想起我以前經(jīng)常使用的方法,那就是編寫Shell和SQL教本(甚至是存儲過程)來導(dǎo)入數(shù)據(jù)。但是由于我們的數(shù)據(jù)模型太過復(fù)雜,我決定在web應(yīng)用之外盡可能的利用現(xiàn)有的實(shí)體,SPRing DAO以及服務(wù)并且開發(fā)一個(gè)自定義的J2SE命令行數(shù)據(jù)加載工具。

  大問題:你該怎樣呢?

  現(xiàn)在很多Hibernate的文檔和范例都是綁定在容器上。不管是web應(yīng)用還是內(nèi)部的大型應(yīng)用,總會使用到容器的。人們有很好的理由去使用它。容器是設(shè)計(jì)來提供對各種特性的支持,例如事務(wù)處理,線程以及安全。現(xiàn)今,這些特性都是開發(fā)中等規(guī)模和企業(yè)應(yīng)用所必需的工具。然而當(dāng)你需要在容器之外訪問實(shí)體時(shí),你該怎樣呢?你是使用現(xiàn)有的架構(gòu)和代碼呢,還是會從一個(gè)不同的角度來解決問題,比如說完全采用另一種開發(fā)語言?當(dāng)然,我們沒有正確答案。在本文的余下部分,我將說明我的方法:就是在Spring容器之外重用現(xiàn)有的實(shí)體/POJO。

  起初,腳本語言,例如Perl,Python,Ruby甚至Tcl(是的,我以前也做過這個(gè))看起來有很多優(yōu)勢。它們能省下很多時(shí)間,可以輕易得到初始結(jié)果,還能規(guī)避許多Hibernate潛在的復(fù)雜度。人們完全可能只用幾行代碼就可以連接數(shù)據(jù)庫,查詢結(jié)果,已經(jīng)打印輸出到終端屏幕或者日志文件。然而,取決于你的數(shù)據(jù)模型,事情也(總是)會變得相當(dāng)復(fù)雜。譬如說你有一個(gè)表 person, 其中有一個(gè)外鍵屬于表 address。當(dāng)我們添加數(shù)據(jù)的時(shí)候,表address沒有正確的插入數(shù)據(jù),就會導(dǎo)致表person 也不能插入了。這是個(gè)很典型的事務(wù)處理方面的問題。也許有人會說在腳本語言中這個(gè)問題不難解決,就像在你的主程序里一樣。可是問題仍然存在,為什么要這樣做呢?業(yè)務(wù)邏輯不是已經(jīng)在你的應(yīng)用里面了嗎?為什么要在寫一遍代碼呢?而且這并不是唯一的情況,你必須重復(fù)你的工作和業(yè)務(wù)邏輯,這樣就會帶來出錯(cuò)的可能。

  然而,有些人會覺得這樣也行,他們使用自己覺得最適合的工具。也許你已經(jīng)因?yàn)槌绦蛑獾脑蚨辛四撤N獨(dú)立的架構(gòu);也許你會在獨(dú)立的數(shù)據(jù)庫里加載和測試數(shù)據(jù),然后在通過各種測試后再遷移到產(chǎn)品的數(shù)據(jù)庫里;又也許你把數(shù)據(jù)庫維護(hù)外包出去,你只需要把相關(guān)文件發(fā)給合作伙伴讓他們?nèi)ヌ幚砟切﹩栴}。總之,總會有很多理由不使用現(xiàn)有的Hibernate數(shù)據(jù)層。沒有誰對誰錯(cuò),只是假如你可以也愿意在你的應(yīng)用之外使用現(xiàn)有的代碼,請往下看。我會告訴你一些方法,這能解決你不少的煩惱噢。

  配置

  假如你覺得可以在容器之外使用現(xiàn)有的Hibernate對象的話,那你首先要做的事就是得自己手工治理所有的配置項(xiàng),在本文余下部分我所采用的方法是使用一個(gè)基于命令行的java程序。既然你已經(jīng)配置了Hibernate xml配置文件,你應(yīng)該知道需要提供的參數(shù),例如JNDI DataSource名,實(shí)體映射文件,還有其他一些處理SQL日志的屬性。假如你想使用命令行程序的話,你就得解決如何解析XML文件和把它添加到配置項(xiàng)中的這些問題。雖然解析XML文件也不難,但這本身并不是我們的重點(diǎn)。因此,我建議使用propetries文件,properties文件比較直觀而且輕易加載并從中讀取數(shù)據(jù)。下面是配置Hibernate所需要的最小屬性集(不包括任何實(shí)體映射)。

  清單1:

hibernate.dialect=net.sf.hibernate.dialect.PostgreSQLDialect
hibernate.connection.driver_class=org.postgresql.Driver
hibernate.connection.url=jdbc:postgresql://devserver/devdb
hibernate.connection.username=dbuserhibernate.connection.passWord=dbpassword
hibernate.query.substitutions yes 'Y'
  正如你所看到的,上面的屬性值指定了數(shù)據(jù)庫方言,JDBC驅(qū)動,數(shù)據(jù)庫url,用戶名,用戶密碼,以及是否使用查找替換。只要定義以上幾項(xiàng)數(shù)值并保存在文件hibernate.properties里(要放置在你的類路徑里面哦),就能很輕松的加載,填充到Hibernate Configuation類里面。

  清單2:



發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 志丹县| 韩城市| 寿宁县| 姜堰市| 台东市| 文成县| 保亭| 镇赉县| 东山县| 吉林省| 盐城市| 壶关县| 佛学| 双牌县| 太康县| 临安市| 武定县| 徐州市| 赤水市| 青海省| 武功县| 霍州市| 长垣县| 施秉县| 伊通| 汾西县| 黔南| 裕民县| 河西区| 航空| 台南市| 彝良县| 金堂县| 深圳市| 中方县| 兴义市| 揭东县| 方城县| 肇庆市| 乌苏市| 山西省|