簡體   English   中英

何時使用Hibernate / JPA / Toplink?

[英]When to use Hibernate/JPA/Toplink?

現在我正在制作一個非常簡單的網站 - 大約5頁。 問題是,如果它是過度的,值得花時間集成某種數據庫映射解決方案,或者如果只使用普通的舊JNDI會更好。 我可能需要從數據庫中讀取/寫入十幾件東西。 我想我對這些技術有基本的了解,但仍需要大量參考文檔。 還有其他人面臨過這個決定嗎?

編輯:對不起,我應該指定JNDI來查找數據庫連接和JDBC來執行操作。

簡短回答:這取決於您想要支持的復雜性。

答案很長:

首先,ORM(對象關系映射 - 您稱之為數據庫映射 - )和JNDI(Java命名和目錄接口)是兩回事。

您已經知道的第一個用於將數據庫表映射到類和對象。 第二種是為資源提供查找機制,它們可以是DataSources,Ejb,Queues或其他。

也許你的意思是“JDBC”。

至於你的問題:如果這很簡單可能沒有必要實現ORM。 數字表最多約為5 - 10,我猜這些操作非常簡單。

可能使用普通的JDBC就足夠了。

如果您使用DAO模式,您可以稍后更改它以支持ORM策略(如果需要)。

像這樣:假設您有Employee表

您可以手動創建帶有DB的所有字段的Employee.java(它不應該花太長時間),使用以下方法創建EmployeeDaO.java:

+findById( id ): Employee
+insert( Employee ) 
+update( Employee )
+delete( Employee ) 
+findAll():List<Employee>

實施非常簡單:

select * from employee where id = ?
insert into employee ( bla, bla, bla ) values ( ? , ? , ? )
update etc. etc 

當(和If)您的應用程序變得過於復雜時,您可能會更改DAO實現。 例如,在“select”方法中,您可以更改代碼以使用執行操作的ORM對象。

public Employee selectById( int id ) {
      // Commenting out the previous implementation...
      // String query = select * from employee where id = ? 
      // execute( query )  

      // Using the ORM solution

       Session session = getSession();
       Employee e = ( Employee ) session.get( Employee.clas, id );
       return e;
}

這只是一個例子,在現實生活中你可以讓抽象工廠創建ORM DAO,但這是offtopic。 重點是您可以從簡單開始,並且通過使用設計模式,您可以在以后根據需要更改實施。

當然,如果你想學習這項技術,你甚至可以用一張桌子來開始學習。

選擇一種或另一種(ORM解決方案)主要取決於您使用的技術。 例如,對於JBoss或其他開源產品,Hibernate非常棒。 它是開源的,有很多資源可供學習。 但是如果你正在使用已經有Toplink的東西(比如oracle應用服務器),或者如果基礎已經建立在Toplink上,你應該繼續使用該框架。

順便說一句,自甲骨文收購BEA以來,他們表示他們正在用現在所謂的“Oracle Weblogic Application Server”中的toplink取代Kodo(weblogic peresistence framework)。

我給你留下了一些資源,你可以從中獲得更多信息:


在這本“企業應用程序架構模式”一書中,Martin Fowler解釋了在哪里使用,這是目錄。 看看數據源架構模式與對象關系行為模式:

PEAA目錄


DAO(數據訪問對象)是核心J2EE模式目錄的一部分:

DAO模式


這是Hibernate的入門教程:

過冬


Toplink的官方頁面:

排名靠前


最后,我“認為”JPA的好想法是你最近可能會改變提供者。

從簡單開始然后進化。

我希望這有幫助。

對於一個非常簡單的應用程序來說,它似乎有點過分,特別是如果你沒有計划擴展它。 但是,使用這個簡單的應用程序似乎也值得一試,以便您可以更好地了解它們在下次有可能使用它們時的工作方式。

你的意思是普通的舊JDBC嗎? 一個小項目可能是一個很好的機會來獲取一個ORM框架,特別是如果你有時間的話。

如果沒有更多信息,很難以這種或那種方式提供推薦。

我的經驗法則是,如果它是只讀的,我願意在JDBC中執行它,盡管我更喜歡使用帶有SQLQuery的空Hibernate項目來利用Hibernate的類型映射。 一旦我必須寫入,我就會使用Hibernate,因為設置一些屬性然后調用save比單獨設置每個列要容易得多。 當你必須開始優化以避免更改未更改的對象時,最好使用OR / M及其臟檢查。 處理外鍵關系是另一個標志,您需要映射一次然后使用getter。 相同的邏輯適用於Toplink,雖然除非他們在我使用它的3年內添加了類似HQL的東西,否則Hibernate對於從純SQL的這種轉換會好得多。 請記住,您不必映射每個對象/表,只有那些有明顯優勢的對象/表。 根據我的經驗,大多數不使用現有OR / M的項目最終會構建一個新的OR / M,這是一個壞主意。

學習ORM的最佳方法是在一個小項目上。 從這個項目開始。

一旦掌握了它,你將使用ORM來做所有事情。

對於ORM來說,沒有什么比這更小的了。 在你的第一個項目之后,你會發現你不能以任何其他方式工作。 ORM映射通常比幾乎任何其他工作方式更有意義。

看看這里的各種toplink指南,它們有介紹,示例,場景等

http://docs.oracle.com/cd/E14571_01/web.1111/b32441/toc.htm

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM