• <menu id="w2i4a"></menu>
  • logo MyEclipse數(shù)據(jù)庫教程

    文檔首頁>>MyEclipse數(shù)據(jù)庫教程>>MyEclipse數(shù)據(jù)庫教程:使用Java項(xiàng)目查看JPA工作方式

    MyEclipse數(shù)據(jù)庫教程:使用Java項(xiàng)目查看JPA工作方式


    下載MyEclipse  購買MyEclipse

    1、建立一個項(xiàng)目

    一般情況,JPA Facet將被添加到Java或Web項(xiàng)目中。在本教程中,您將使用一個簡單的Java項(xiàng)目來查看JPA的工作方式。

    注意:您可以下載本教程中開發(fā)的項(xiàng)目,然后導(dǎo)入到您的工作區(qū)中。

    • 單擊下拉箭頭,然后選擇Java Project。

    • 在“Project Name”字段中輸入SampleJPAProject,選擇默認(rèn)選項(xiàng),然后單擊“完成”。

    • 單擊,選擇MyEclipse Database Explorer打開透視圖。

    • 在數(shù)據(jù)庫瀏覽器中,選擇MyEclipse Derby連接,然后單擊。

    注意:在建立數(shù)據(jù)庫連接之前,無法添加JPA Facet,因?yàn)樾枰x擇要使用的連接。

    • 切換回MyEclipse Java Enterprise透視圖,右鍵單擊項(xiàng)目,然后選擇MyEclipse > Project Facets > Install JPA Facet。

    • 在目標(biāo)運(yùn)行時下拉列表中選擇MyEclipse通用Java運(yùn)行時,然后單擊下一步。

    • 從平臺下拉列表中選擇一個平臺,如果JPA實(shí)現(xiàn)類型默認(rèn)為用戶庫,則選擇與所選平臺相對應(yīng)的庫。如果未列出任何庫,可單擊下載適當(dāng)?shù)膸臁?/p>

    • 在“Connection”字段中選擇MyEclipse Derby,選中“Add driver library to build path”和“Override default schema”復(fù)選框,然后從“Schema”下拉列表中選擇CLASSICCARS。單擊完成。

    現(xiàn)在,項(xiàng)目中已添加了完全配置的JPA Facet,其中包括JPA配置信息/DB連接信息以及添加到項(xiàng)目構(gòu)建路徑中的所有必需的JDBC和JPA庫。如果這是一個Web項(xiàng)目,則在將項(xiàng)目部署到應(yīng)用程序服務(wù)器上并在其中運(yùn)行時,所有構(gòu)建路徑的附加內(nèi)容都將準(zhǔn)備好進(jìn)行部署。

    2、創(chuàng)建一個Java包

    在下一個步驟中,對數(shù)據(jù)庫表中的數(shù)據(jù)進(jìn)行反向工程,并為項(xiàng)目生成實(shí)體。在進(jìn)行逆向工程之前,需要創(chuàng)建一個Java包,并在其中放置這些實(shí)體。

    • 展開項(xiàng)目,右鍵單擊src文件夾,然后選擇New > Package。

    • 在“Name”字段中輸入com.myeclipseide.jpa,然后單擊“完成”。

    3、逆向工程數(shù)據(jù)庫表

    現(xiàn)在已經(jīng)建立了項(xiàng)目,可以將PRODUCTLINE表反向工程到項(xiàng)目中,并開始使用所生成的實(shí)體。

    • 右鍵單擊該項(xiàng)目,然后選擇JPA Tools > Generate Entities & DAOs。

    注意:您可以選擇使用MyEclipse逆向工程工具或DALI實(shí)體生成器。選擇,單擊“確定”,然后完成向?qū)А1窘坛淌褂肕yEclipse逆向工程工具。

    • 選擇PRODUCTLINE表,單擊添加,然后單擊下一步。

    在“Java Package”字段中,單擊“ Browse”,然后選擇先前創(chuàng)建的com.myeclipseide.jpa程序包。選中以下復(fù)選框:

    • Entity Bean Generation:讓MyEclipse生成注釋為用作JPA實(shí)體的普通Java類。

    • Create abstract class;如果您希望自定義生成的類,而不必每次都覆蓋更改,則MyEclipse可以生成基本抽象類以及您可以自定義和使用的具體子類。每次進(jìn)行反向工程時,MyEclipse只會覆蓋抽象基類,并在具體子類中保留更改。

    • Update persistence.xml:與Hibernate類似,您可以在JPA配置文件中列出正在使用的所有JPA實(shí)體。

    • Java Data Access Generation:讓MyEclipse生成DAO實(shí)用程序類,讓您可以立即從數(shù)據(jù)庫中保存/查找/更新/刪除實(shí)體。此代碼包含了JPA實(shí)體管理器,使得使用實(shí)體和數(shù)據(jù)庫變得非常容易。

    • Generate Precise findBy Methods:讓MyEclipse生成findByXXX方法,其中XXX與反轉(zhuǎn)的實(shí)體上的每個屬性有關(guān)。這樣一來,可以使用任何屬性作為查找實(shí)體的方法,輕松地從數(shù)據(jù)庫訪問實(shí)體。

    • Generate Java Interfaces:選擇此選項(xiàng)將創(chuàng)建帶有相應(yīng)DAO實(shí)現(xiàn)類的接口類。取消選擇此選項(xiàng)僅生成DAO實(shí)現(xiàn)類,而沒有用于定義接口的單獨(dú)類。

    • 單擊完成。查看通過展開com.myeclipseide.jpa包生成的MyEclipse資源。

    生成的實(shí)體描述如下:

    • EntityManagerHelper:使用直接JPA時,開發(fā)人員需要使用EntityManager class。EntityManager通過提供用于訪問管理器的靜態(tài)方法以及易于調(diào)用的最常用操作,此生成的幫助程序類讓使用EntityManager的過程變得更加容易。

    • IProductline:定義相應(yīng)DAO實(shí)現(xiàn)類的接口的類。

    • Productline:此類是表示數(shù)據(jù)庫表PRODUCTLINE的JPA實(shí)體(POJO)。該P(yáng)OJO包含PRODUCTLINE表的字段,并表示數(shù)據(jù)庫中的一行。

    • ProductlineDAO:此類包含EntityManagerHelper以便為我們提供易于使用的方法,專門用于在數(shù)據(jù)庫中添加/查找/更新和刪除產(chǎn)品。

    注意:逆向工程完成后,您可以打開“Persistence”透視圖,使用某些持久性和數(shù)據(jù)源工具來分析數(shù)據(jù)庫和項(xiàng)目中的數(shù)據(jù)。

    4、編寫應(yīng)用程序

    由于MyEclipse生成了許多代碼,所以您可以快速將精力放在“Business Logic”上,或更具體地說是“實(shí)際完成工作的代碼”。在本部分中,您將編寫一個具有main方法的Java類,該方法將Productline插入數(shù)據(jù)庫,對其進(jìn)行檢索、更新并刪除。使用此代碼,您會發(fā)現(xiàn)在應(yīng)用程序中使用JPA實(shí)體是多么容易!

    4.1 創(chuàng)建一個類

    • 右鍵單擊com.myeclipseide.jpa軟件包,然后選擇New Class。

    • 在“Name”字段中鍵入RunJPA,選中Public static void main復(fù)選框,然后單擊“Finish”。

    在構(gòu)建新類和main方法之后,需要編寫代碼來操作Productline實(shí)例。

    注意:以下代碼看起來很長而且很復(fù)雜,這是因?yàn)槲覀冊噲D在一個代碼塊中顯示四個不同的示例。如果您查看每個操作(保存、加載、更新、刪除),就會發(fā)現(xiàn)它們都不由幾行代碼組成。

    • 將以下代碼添加到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"));


    上面的代碼看起來很復(fù)雜,但它做了很多簡單的事情。例如,如果您只對在數(shù)據(jù)庫中存儲新項(xiàng)目感興趣,則只需要程序中第1-3步中的代碼,這相當(dāng)于(減去注釋)三行代碼。以下是每個編號部分的細(xì)分:

    1. PRODUCTLINE表使用產(chǎn)品線的名稱作為主鍵。為了使本教程更容易理解,我們在字符串中定義了產(chǎn)品線名稱,并在代碼中多次運(yùn)用(創(chuàng)建和存儲產(chǎn)品線,然后檢索兩次)。

    2. 這將創(chuàng)建由MyEclipse生成的Productline POJO的新實(shí)例,并將其插入數(shù)據(jù)庫中。對于本教程而言,這些值并不重要,所以我們只使用示例信息。

    3. 這將創(chuàng)建要使用的DAO實(shí)例。數(shù)據(jù)庫訪問需要DAO(這也是由MyEclipse生成的)。

    4. 這讓DAO將新的產(chǎn)品系列存儲在數(shù)據(jù)庫中。因?yàn)橐驍?shù)據(jù)庫中寫入一些內(nèi)容,所以將save調(diào)用包含在事務(wù)中。

    5. 為了確保使用第1步中定義的ID正確存儲了產(chǎn)品系列,我們要求DAO獲取產(chǎn)品系列,并將結(jié)果分配給一個全新的對象,以完全確保從數(shù)據(jù)庫中加載了什么。(我們可以將值分配回newProductline,但是出于本教程的目的,我們必須清楚地知道對象來源,并且加載的實(shí)例之前在代碼中不存在)。

    6. 這將從已加載的實(shí)體中打印出值,以確保它只是存儲在數(shù)據(jù)庫中的值。

    7. 這將更改剛剛加載的POJO的值,以顯示更新記錄的工作方式。然后,使用DAO將更改提交回?cái)?shù)據(jù)庫。同樣的,此操作被包含在事務(wù)中,以確保安全地更改數(shù)據(jù)庫。

    8. 與步驟5一樣,使用在步驟1中定義的ID從數(shù)據(jù)庫中重新加載記錄,以確保更新操作有效。然后打印出POJO值,以確保新描述已保存到數(shù)據(jù)庫中。

    9. 這顯示了如何從數(shù)據(jù)庫刪除記錄。同樣的,由于這需要更改數(shù)據(jù)庫,因此該代碼被包含在事務(wù)中。

    10. 與第8步和第5步類似,為了證明刪除有效,我們嘗試使用給定的ID從數(shù)據(jù)庫加載實(shí)體。因?yàn)槲覀円呀?jīng)刪除了Productline,所以這個操作應(yīng)該是失敗的。從DAO獲得結(jié)果后,將使用嵌入式IF子句打印一條語句,以確保結(jié)果為null。

    4.2運(yùn)行應(yīng)用程序

    • 右鍵單擊項(xiàng)目,然后選擇Run As > Java Application。

    • 選擇RunJPA應(yīng)用程序,然后單擊“確定”。

    輸出顯示在Console視圖中。

    output1.jpg

    紅色文本是來自MyEclipse中生成的DAO和EntityHelper類的默認(rèn)日志消息。黑色文本是代碼中用于跟蹤進(jìn)度的System.out.println文本。如您所見,第6步中的第一個打印輸出和第8步中的更新打印輸出都按預(yù)期工作。并且查詢沒有返回Productline,證明刪除也很成功。

    5、資源


    慧都16周年·技術(shù)服務(wù)月,軟件商城優(yōu)惠券不限量免費(fèi)領(lǐng)取,購MyEclipse享折上折,查看詳情>>>


    想進(jìn)一步了解MyEclipse?【MyEclipse官方中文網(wǎng)】知你所需,解你所惑!

    想與更多人聊MyEclipse?加入MyEclipse中國(官方2):742336981暢所欲言吧!

    想及時獲取MyEclipse資訊?掃描下方二維碼,MyEclips信息跟你走!

    掃碼咨詢


    添加微信 立即咨詢

    電話咨詢

    客服熱線
    023-68661681

    TOP
    三级成人熟女影院,欧美午夜成人精品视频,亚洲国产成人乱色在线观看,色中色成人论坛 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();