MyEclipse數據庫教程:使用Java項目查看JPA工作方式
1、建立一個項目
一般情況,JPA Facet將被添加到Java或Web項目中。在本教程中,您將使用一個簡單的Java項目來查看JPA的工作方式。
注意:您可以下載本教程中開發的項目,然后導入到您的工作區中。
單擊下拉箭頭
,然后選擇Java Project。
在“Project Name”字段中輸入SampleJPAProject,選擇默認選項,然后單擊“完成”。
單擊
,選擇MyEclipse Database Explorer打開透視圖。
在數據庫瀏覽器中,選擇MyEclipse Derby連接,然后單擊。
注意:在建立數據庫連接之前,無法添加JPA Facet,因為需要選擇要使用的連接。
切換回MyEclipse Java Enterprise透視圖,右鍵單擊項目,然后選擇MyEclipse > Project Facets > Install JPA Facet。
在目標運行時下拉列表中選擇MyEclipse通用Java運行時,然后單擊下一步。
從平臺下拉列表中選擇一個平臺,如果JPA實現類型默認為用戶庫,則選擇與所選平臺相對應的庫。如果未列出任何庫,可單擊
下載適當的庫。
在“Connection”字段中選擇MyEclipse Derby,選中“Add driver library to build path”和“Override default schema”復選框,然后從“Schema”下拉列表中選擇CLASSICCARS。單擊完成。
現在,項目中已添加了完全配置的JPA Facet,其中包括JPA配置信息/DB連接信息以及添加到項目構建路徑中的所有必需的JDBC和JPA庫。如果這是一個Web項目,則在將項目部署到應用程序服務器上并在其中運行時,所有構建路徑的附加內容都將準備好進行部署。
2、創建一個Java包
在下一個步驟中,對數據庫表中的數據進行反向工程,并為項目生成實體。在進行逆向工程之前,需要創建一個Java包,并在其中放置這些實體。
展開項目,右鍵單擊src文件夾,然后選擇New > Package。
在“Name”字段中輸入com.myeclipseide.jpa,然后單擊“完成”。
3、逆向工程數據庫表
現在已經建立了項目,可以將PRODUCTLINE表反向工程到項目中,并開始使用所生成的實體。
右鍵單擊該項目,然后選擇JPA Tools > Generate Entities & DAOs。
注意:您可以選擇使用MyEclipse逆向工程工具或DALI實體生成器。選擇,單擊“確定”,然后完成向導。本教程使用MyEclipse逆向工程工具。
選擇PRODUCTLINE表,單擊添加,然后單擊下一步。
在“Java Package”字段中,單擊“ Browse”,然后選擇先前創建的com.myeclipseide.jpa程序包。選中以下復選框:
Entity Bean Generation:讓MyEclipse生成注釋為用作JPA實體的普通Java類。
Create abstract class;如果您希望自定義生成的類,而不必每次都覆蓋更改,則MyEclipse可以生成基本抽象類以及您可以自定義和使用的具體子類。每次進行反向工程時,MyEclipse只會覆蓋抽象基類,并在具體子類中保留更改。
Update persistence.xml:與Hibernate類似,您可以在JPA配置文件中列出正在使用的所有JPA實體。
Java Data Access Generation:讓MyEclipse生成DAO實用程序類,讓您可以立即從數據庫中保存/查找/更新/刪除實體。此代碼包含了JPA實體管理器,使得使用實體和數據庫變得非常容易。
Generate Precise findBy Methods:讓MyEclipse生成findByXXX方法,其中XXX與反轉的實體上的每個屬性有關。這樣一來,可以使用任何屬性作為查找實體的方法,輕松地從數據庫訪問實體。
Generate Java Interfaces:選擇此選項將創建帶有相應DAO實現類的接口類。取消選擇此選項僅生成DAO實現類,而沒有用于定義接口的單獨類。
單擊完成。查看通過展開com.myeclipseide.jpa包生成的MyEclipse資源。
生成的實體描述如下:
EntityManagerHelper:使用直接JPA時,開發人員需要使用EntityManager class。EntityManager通過提供用于訪問管理器的靜態方法以及易于調用的最常用操作,此生成的幫助程序類讓使用EntityManager的過程變得更加容易。
IProductline:定義相應DAO實現類的接口的類。
Productline:此類是表示數據庫表PRODUCTLINE的JPA實體(POJO)。該POJO包含PRODUCTLINE表的字段,并表示數據庫中的一行。
ProductlineDAO:此類包含EntityManagerHelper以便為我們提供易于使用的方法,專門用于在數據庫中添加/查找/更新和刪除產品。
注意:逆向工程完成后,您可以打開“Persistence”透視圖,使用某些持久性和數據源工具來分析數據庫和項目中的數據。
4、編寫應用程序
由于MyEclipse生成了許多代碼,所以您可以快速將精力放在“Business Logic”上,或更具體地說是“實際完成工作的代碼”。在本部分中,您將編寫一個具有main方法的Java類,該方法將Productline插入數據庫,對其進行檢索、更新并刪除。使用此代碼,您會發現在應用程序中使用JPA實體是多么容易!
4.1 創建一個類
右鍵單擊com.myeclipseide.jpa軟件包,然后選擇New Class。
在“Name”字段中鍵入RunJPA,選中Public static void main復選框,然后單擊“Finish”。
在構建新類和main方法之后,需要編寫代碼來操作Productline實例。
注意:以下代碼看起來很長而且很復雜,這是因為我們試圖在一個代碼塊中顯示四個不同的示例。如果您查看每個操作(保存、加載、更新、刪除),就會發現它們都不由幾行代碼組成。
將以下代碼添加到main方法中,然后按CTRL + S保存。
/* 1. Create a reference to our ID */ String productLineID = "Men's Shoes"; /* 2. Create a new Productline instance */ Productline newProductline = new Productline( productLineID, "Shoes for men.", "Men's Shoes", null); /* 3. Create a DAO instance to use */ ProductlineDAO dao = new ProductlineDAO(); /* 4. Store our new product line in the DB */ EntityManagerHelper.beginTransaction(); dao.save(newProductline); EntityManagerHelper.commit(); /* 5. Now retrieve the new product line, using the ID we created */ Productline loadedProductline = dao.findById(productLineID); /* 6. Print out the product line information */ System.out.println("*NEW* Product Line [productLine=" + loadedProductline.getProductline() + ", textDescription=" + loadedProductline.getTextdescription() + ", image=" + loadedProductline.getImage() + "]"); /* * 7. Now let's change same value on the product line, and save the * change */ loadedProductline.setTextdescription("Product line for men's shoes."); EntityManagerHelper.beginTransaction(); dao.save(loadedProductline); EntityManagerHelper.commit(); /* * 8. Now let's load the product line from the DB again, and make sure * it text description changed */ Productline secondLoadedProductline = dao.findById(productLineID); System.out.println("*REVISED* Product Line [" + "productLine=" + secondLoadedProductline.getProductline() + ", textDescription=" + secondLoadedProductline.getTextdescription() + ", image=" + secondLoadedProductline.getImage() + "]"); /* 9. Now let's delete the product line from the DB */ EntityManagerHelper.beginTransaction(); dao.delete(secondLoadedProductline); EntityManagerHelper.commit(); /* * 10. To confirm the deletion, try and load it again and make sure it * fails */ Productline deletedProductline = dao.findById(productLineID); /* * We use a simple inlined IF clause to test for null and print * SUCCESSFUL/FAILED */ System.out.println("Productline deletion: " + (deletedProductline == null ? "SUCCESSFUL" : "FAILED"));
上面的代碼看起來很復雜,但它做了很多簡單的事情。例如,如果您只對在數據庫中存儲新項目感興趣,則只需要程序中第1-3步中的代碼,這相當于(減去注釋)三行代碼。以下是每個編號部分的細分:
PRODUCTLINE表使用產品線的名稱作為主鍵。為了使本教程更容易理解,我們在字符串中定義了產品線名稱,并在代碼中多次運用(創建和存儲產品線,然后檢索兩次)。
這將創建由MyEclipse生成的Productline POJO的新實例,并將其插入數據庫中。對于本教程而言,這些值并不重要,所以我們只使用示例信息。
這將創建要使用的DAO實例。數據庫訪問需要DAO(這也是由MyEclipse生成的)。
這讓DAO將新的產品系列存儲在數據庫中。因為要向數據庫中寫入一些內容,所以將save調用包含在事務中。
為了確保使用第1步中定義的ID正確存儲了產品系列,我們要求DAO獲取產品系列,并將結果分配給一個全新的對象,以完全確保從數據庫中加載了什么。(我們可以將值分配回newProductline,但是出于本教程的目的,我們必須清楚地知道對象來源,并且加載的實例之前在代碼中不存在)。
這將從已加載的實體中打印出值,以確保它只是存儲在數據庫中的值。
這將更改剛剛加載的POJO的值,以顯示更新記錄的工作方式。然后,使用DAO將更改提交回數據庫。同樣的,此操作被包含在事務中,以確保安全地更改數據庫。
與步驟5一樣,使用在步驟1中定義的ID從數據庫中重新加載記錄,以確保更新操作有效。然后打印出POJO值,以確保新描述已保存到數據庫中。
這顯示了如何從數據庫刪除記錄。同樣的,由于這需要更改數據庫,因此該代碼被包含在事務中。
與第8步和第5步類似,為了證明刪除有效,我們嘗試使用給定的ID從數據庫加載實體。因為我們已經刪除了Productline,所以這個操作應該是失敗的。從DAO獲得結果后,將使用嵌入式IF子句打印一條語句,以確保結果為null。
4.2運行應用程序
右鍵單擊項目,然后選擇Run As > Java Application。
選擇RunJPA應用程序,然后單擊“確定”。
輸出顯示在Console視圖中。
紅色文本是來自MyEclipse中生成的DAO和EntityHelper類的默認日志消息。黑色文本是代碼中用于跟蹤進度的System.out.println文本。如您所見,第6步中的第一個打印輸出和第8步中的更新打印輸出都按預期工作。并且查詢沒有返回Productline,證明刪除也很成功。
5、資源
慧都16周年·技術服務月,軟件商城優惠券不限量免費領取,購MyEclipse享折上折,查看詳情>>>
想進一步了解MyEclipse?知你所需,解你所惑!
想與更多人聊MyEclipse?加入MyEclipse中國(官方2):742336981暢所欲言吧!
想及時獲取MyEclipse資訊?掃描下方二維碼,MyEclips信息跟你走!