原文http://www.oracle.com/technetwork/articles/java/springtojavaee-522240.html
By David Heffelfinger
CTO and ardent Java EE fan David Heffelfinger demonstrates how easy it is to develop the data layer of an application using Java EE, JPA, and the NetBeans IDE instead of the Spring Framework.
Published October 2011
Introduction
Spring架構的追隨者聲稱他們選擇的架構要比Java EE好用的多。毫無疑問我是一個Java EE粉絲,寫過好幾本書來詳述該門技術。然而,和大多數開發人員相同,我並不總是直接選擇Java,根據情況有時候會選擇Spring。
每次我做Spring工程時都會緊張,因為我知道一定會使用冗長的費解的XML檔案來決定工程的行為。我也知道這個工程會有差不多10000項依賴並且產生出來的WAR更是巨獸。
使用Java EE時,我需要的大多數服務都由應用伺服器提供好了。所以,需要的依賴項目很少。多數情況下,Java EE會提供配置(也有少量例外),也就是說我自己需要進行的配置很少,因為預設配置能滿足絕大多數情況。當必須配置時,通常使用註解完成。註解讓我只瀏覽代碼就能瞭解工程全景而無需來來回回查看XML和源檔案。
除了前面提到的好處,使用Java EE建立工程還能享受到來自進階工具NetBeans的好處。而且如果我足夠幸運的話,使用GlassFish伺服器開源版本或者Oracle GlassFish伺服器做我的伺服器,就能利用“儲存時部署”特性(每次儲存專案檔時都會自動部署到GlassFish伺服器)。
本系列將用Java EE重寫Spring提供的Pet Clinic應用。這是第一篇,我將圖解如何使用牛逼的NetBeans來快速開發和用Spring版本相同功能的應用。該Java EE版本會使用JavaServer Faces(JSF)作為使用者介面,Data Access Objects(DAO)使用EJB3.1會話bean實現,資料訪問由Java Persistence API(JPA)2.0提供。
本文中我們會使用已經存在的資料庫來產生持久層,以開始開發我們的Java EE版本。在第二部分,我們將看到NetBeans是如何協助我們產生EJB3.1會話bean來作為DAO的,還有JSF2.0來作為使用者介面。
這裡我們假設本地工作站上安裝了MySQL,petclinic資料庫也已經存在。(建立也容易,運行Pet Clinic中的setupDB ANT目標就行。)
首先建立web工程, as shown in Figure 1.
Figure 1. Creating a New Project
指定名稱和位置, as shown in Figure 2.通常,按預設的就可以。
Figure 2. Specifying a Name and Location for the
New Project
現在選擇架構,我們使用的是標準Java EE所以選擇JavaServer Faces,
as shown in Figure 3.
Figure 3. Selecting JavaServer Faces as the Framework
現在選擇伺服器和Java EE版本, as shown in Figure 4. 預設值就可以。
Figure 4. Selecting the Server and Java EE Version
現在點擊Finish完成建立, as shown in Figure 5.
Figure 5. The Newly Created Project
接下來開始開發.
Developing the Application
NetBeans產生了開發我們Java EE應用所需的大部分代碼,它能幫我們產生JPA實體、DAO、JSF頁面、JSF託管bean。
首先需要開發我們的JPA實體。大多數JPA實現都包括了從JPA實體產生資料庫表的能力;然而,反過來不可以。JPA沒有提供從資料庫表產生JPA實體的能力。
所以多數情況下需要手動編寫JPA實體和添加註解、屬性、getter、setter等等。不過使用netBeans就不用了,它可以從資料看自動產生JPA實體。選擇File
| New,在Persistence 目錄下選擇 Entity
Classes from Database, as shown in Figure 6.
Figure 6. Selecting Entity Classes from Database
現在需要資料來源。沒有的話可以當場建立。as shown in Figure 7.
Figure 7. Creating a Data Source
只要輸入 Java Naming and Directory Interface (JNDI)
名字即可, as shown in Figure 8.
Figure 8. Selecting a Database Connection
再次強調,如果沒有資料庫連接建立到目標資料庫上,可以通過嚮導隨時建立。建立後的第一件事就是指定JDBC驅動, as shown in Figure 9.
Figure 9. Selecting a Driver
然後要指定主機、連接埠、資料庫、密碼, as shown in Figure 10.記得點擊Test
Connection查看配的對不對,對的話會看見 “Connection Succeeded” .
Figure 10. Specifying Additional Details and Testing
the Connection
用 MySQL的話,schema就是database. 所以Select schema 這裡是灰色的,
as shown in Figure 11.
Figure 11. Selecting a Schema
現在點擊Finish就建立了資料庫連接。繼續點擊OK直到返回New Entity Classes from Database螢幕。圖12。
NB會通過資料庫表名嘗試猜測出實體類的名稱。petclinic資料庫使用了複數表名(如owners, pets, specialties),但是我們想要使用相應的單數名詞(如Owner, Pet, Specialty)。哈哈,NB就有這功能:它允許修改預設的JPA實體類名稱,這裡雙擊名稱即可。
現在可以隨便選擇為JPA實體的每個欄位產生命名查詢、JAXB註解和持久化單元了。多數情況下選擇一三兩項是好主意,我們可能用不到JAXB註解,不過選了也沒事。
Figure 12. Specifying Entity Classes
點 Next, 指定mapping options, as shown in Figure
13.
在 Association Fetch 列中,可以選擇如何關聯實體並載入。預設是一對一、多對一強載入、一對多、多對多懶載入。可以隨便選一個,多數情況下預設的是最好的。
Figure 13. Specifying How Associated Entities Are
Loaded