[英]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)。
我給你留下了一些資源,你可以從中獲得更多信息:
這是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指南,它們有介紹,示例,場景等
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.