翻譯|使用教程|編輯:陳津勇|2019-11-01 13:53:50.870|閱讀 485 次
概述:將Spring與Hibernate結(jié)合使用可在持久性代碼和業(yè)務邏輯之間添加一個抽象級別,以控制底層的持久性引擎。本教程適用于熟悉Spring以及Java中的依賴注入和持久性的人員。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關鏈接:
在本教程中,您將學習如何:
連接到數(shù)據(jù)庫
將Hibernate和Spring添加到項目中
通過對數(shù)據(jù)庫表進行逆向工程來生成實體
創(chuàng)建Spring Beans作為持久層和數(shù)據(jù)源
啟用Hibernate 3.x注釋支持
1、設置樣本數(shù)據(jù)庫
本教程中的示例使用了一個帶有用戶表和數(shù)據(jù)的MySQL 5實例,用到了以下文件準備樣本數(shù)據(jù)。在開始本教程之前,您必須建立一個數(shù)據(jù)庫。
2、連接到數(shù)據(jù)庫
單擊打開Database Explorer圖標 ,選擇MyEclipse數(shù)據(jù)庫瀏覽器。
在數(shù)據(jù)庫瀏覽器中,單擊,然后選擇新建。
從“Driver Template”下拉菜單中選擇“MySQL Connector/J”,在“Driver name field”字段中鍵入MySQL Connector/J,將
單擊添加JAR。導航到MySQL Connector/J JAR文件的位置,然后選擇文件。“Driver classname field”將自動填充,然后點擊Finish。
在DB Explorer中選擇MySQL Connector/J,然后單擊 打開鏈接。
3、創(chuàng)建一個啟用了Hibernate的項目
您可以為任何受支持的基礎項目(通常是Java或Web)啟用Hibernate和Spring。
選擇File>New>Project,展開Java,選擇Java項目,然后單擊下一步。
在“Project name”字段中輸入HibernateSpringProject,然后單擊“完成”。系統(tǒng)將提示您切換到Java透視圖。選擇“Yes”。
右鍵單擊該項目,選擇 Configure Facets > Install Hibernate Facet。注意,這里需要選擇4.1作為Hibernate規(guī)范版本。
點擊下一步。MyEclipse將創(chuàng)建一個新的hibernate.cfg.xml文件。
單擊Java package字段旁邊的New為session factory class創(chuàng)建一個新的軟件包,并命名為com.myeclipse.hibernatespring,然后單擊“完成”。
單擊下一步,從數(shù)據(jù)庫驅(qū)動程序下拉列表中選擇MySQL Connector/J,輸入密碼,然后單擊完成。
現(xiàn)在,該項目包含所有Hibernate和JDBC庫,并且hibernate.cfg.xml文件在“Configuration”編輯器中打開。配置文件包含來自連接配置文件的連接信息。當您對數(shù)據(jù)庫表進行反向工程時,實體將出現(xiàn)在配置文件的Mappings部分。
4、將Spring Facet添加到項目中
對于小型應用程序來說,Spring并不太適用,但是當您看到使用Spring通過簡單地調(diào)整bean配置文件中的引用來交換代碼庫的整個部分有多么容易時,您就會意識到該工具的功能真的很強大。最明顯的是,使用Spring來測試將會簡單很多。例如,您可以交換一個持久性實現(xiàn),該實現(xiàn)將其所有調(diào)用都發(fā)送給嵌入式DBMS,或者記錄其所有活動。然后,當應用程序部署到生產(chǎn)環(huán)境中時,將持久性實現(xiàn)切換回使用主DBMS的代碼,這些代碼不使用日志記錄就能提高性能。
右鍵單擊該項目,然后選擇 Configure Facets > Install Spring Facet
接受默認的Spring版本和目標運行時,然后單擊Next。
MyEclipse將創(chuàng)建一個新的applicationContext.xml文件。點擊完成。
現(xiàn)在,這個項目就同時具有Hibernate和Spring功能。
5、逆向工程數(shù)據(jù)庫表
對數(shù)據(jù)庫表進行反向工程時,會在項目中生成Hibernate(Java)對象。由于該項目是Hibernate-Spring項目,所以MyEclipse在逆向工程期間提供的不僅僅是普通DAO,而是Spring DAO選項。這就意味著系統(tǒng)將自動創(chuàng)建DAO Spring bean,這些bean的sessionFactory屬性已經(jīng)正確配置為對Hibernate SessionFactory的現(xiàn)有Spring引用。接下來,我們將通過幾個步驟使用簡單的逆向工程形式,讓向?qū)Й@取所有默認值。但是,為了實現(xiàn)最大程度的控制,您可以使用“Nxt”按鈕,通過向?qū)б徊揭徊降貫g覽詳細信息,比如主鍵生成策略、對象名稱、類型等。
切換回數(shù)據(jù)庫瀏覽器透視圖。
在數(shù)據(jù)庫瀏覽器中,將MySQL Connector/J擴展到用戶表。
右鍵單擊用戶表,然后選擇“Hibernate Reverse Engineering”。
單擊Java src文件夾旁邊的瀏覽,展開 HibernateSpringProject > src,選擇com.myeclipse.hibernatespring,然后單擊確定。
選擇 Create POJO <> DB 表映射信息復選框,選擇Java數(shù)據(jù)對象復選框,再選擇Java數(shù)據(jù)訪問對象(DAO)復選框,然后單擊完成。您將收到系統(tǒng)關于切換到Hibernate透視圖的提示,只需要單擊“Yes”即可。
將Hibernate類生成到Java包中,并創(chuàng)建Spring Bean。
6、編寫 Hibernate-Spring 代碼
設置好項目后,就可以開始編寫代碼了。本過程需要兩段代碼:
業(yè)務邏輯:表示應用程序代碼的主要方法。
持久層:這是業(yè)務邏輯應用于數(shù)據(jù)庫功能的應用程序的抽象部分。如果使用的所有業(yè)務邏輯都是持久性層,那么您可以在這一層后面隱藏它工作的一些細節(jié)。本例使用Spring將執(zhí)行數(shù)據(jù)庫操作所需的必要DAO引用填充到持久層,這樣做的好處是業(yè)務邏輯不需要了解任何相關信息。
將每個名為BusinessLogic.java和PersistenceLayer.java的類添加到com.myeclipse.hibernatespring包。從持久性層開始,因為它位于剛剛生成的所有代碼和在業(yè)務邏輯層中編寫的代碼之間。它是持久化技術(Hibernate)和由Spring管理的業(yè)務邏輯(main方法)之間的抽象。將以下代碼添加到PersistenceLayer類,這個類的目的是獲得一個由Spring注入的UserDAO實例,然后使用該引用來實現(xiàn)save/find/update和delete操作(不需要調(diào)用代碼的)。這使您不用完全更改應用程序的代碼就能輕松、快速地修改應用程序中的持久性代碼。更具體地說,如果您想更改PersistenceLayer的實現(xiàn)方式,比如說要更好地管理異常、事務或其他任何事情,可以通過編輯此類來完成。只要所有方法標簽保持不變,就不需要重構(gòu)整個應用程序。
package com.myeclipse.hibernatespring; public class PersistenceLayer { private UserDAO userDAO; public UserDAO getUserDAO() { return userDAO; } public void setUserDAO(UserDAO userDAO) { this.userDAO = userDAO; } public void addUser(User user) { userDAO.save(user); } public User findUserById(Integer id) { return userDAO.findById(id); } public void updateUser(User user) { userDAO.merge(user); } public void deleteUser(User user) { userDAO.delete(user); } }
另外,由于此抽象層與應用程序代碼中的持久性代碼是松散地耦合的,可以輕松的使用Spring注入一個測試UserDAO實現(xiàn)。例如,該實現(xiàn)模擬數(shù)據(jù)庫操作,但實際上并不執(zhí)行這些操作。現(xiàn)在您已經(jīng)實現(xiàn)了PersistenceLayer,接下來將以下業(yè)務邏輯(或主要方法實現(xiàn))代碼添加到BusinessLogic類。業(yè)務邏輯(主要方法)利用抽象的持久層來添加/查找/更新以及從數(shù)據(jù)庫中刪除用戶。
package com.myeclipse.hibernatespring; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class BusinessLogic { public static void main(String[] args) { /* 1. Create a new user */ Integer id = new Integer(1); User user = new User(); user.setId(id); user.setUsername("jdoe"); user.setPassword("1234"); user.setFirstName("John"); user.setLastName("Doe"); user.setDateCreated(Long.valueOf(System.currentTimeMillis())); /* 2. Load the Spring bean configuration and create a bean factory */ ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml"); /* 3. Create instance of PersistenceLayer */ PersistenceLayer persistenceLayer = (PersistenceLayer) ctx.getBean("persistenceLayer"); /* 4. Save the new user to the database */ persistenceLayer.addUser(user); /* 5. Confirm that our user was saved */ User userLoadedFromDB = persistenceLayer.findUserById(id); System.out.println("User Loaded from DB [username=" + userLoadedFromDB.getUsername() + ", password=" + userLoadedFromDB.getPassword() + ", firstName=" + userLoadedFromDB.getFirstName() + ", lastName=" + userLoadedFromDB.getLastName() + "]"); /* 6. Update the user */ userLoadedFromDB.setFirstName("Johnathan"); persistenceLayer.updateUser(userLoadedFromDB); /* 7. Confirm that the update worked */ User userLoadedFromDBAgain = persistenceLayer .findUserById(id); System.out.println("User Loaded from DB Again [firstName=" + userLoadedFromDBAgain.getFirstName() + "]"); /* 8. Delete the user */ persistenceLayer.deleteUser(user); } }
這個代碼具有以下功能:
創(chuàng)建一個新用戶來插入數(shù)據(jù)庫。它使用MyEclipse在從數(shù)據(jù)庫逆向工程用戶表時生成的用戶POJO。
創(chuàng)建一個bean工廠。它的作用是讀入Spring bean配置文件,然后向“工廠”提供一個實例,該“工廠”可用于根據(jù)該文件中的規(guī)范獲取bean的實例。這是Spring的“入口點”。
創(chuàng)建PersistenceLayer實例,這樣就可以執(zhí)行數(shù)據(jù)庫操作了!注意,為了正確填充UserDAO引用,您必須使用bean工廠來獲取實例。
使用創(chuàng)建的PersistenceLayer實例將新用戶保存到數(shù)據(jù)庫。注意,由于所有調(diào)用都通過PersistenceLayer進行,因此BusinessLogic類不了解UserDAO類或任何底層詳細信息。
在保存時,分配給用戶的ID將從數(shù)據(jù)庫中重新加載用戶,通過這樣的方式來檢查并確保所有值都是正確的。
更新用戶名查看更新記錄是否有效。
重新從數(shù)據(jù)庫加載用戶,以確保修改的地方已完全更新。
從數(shù)據(jù)庫中刪除用戶。
更多“使用Hibernate和Spring執(zhí)行數(shù)據(jù)庫操作”的教程內(nèi)容,請點擊此處查看>>>
想進一步了解MyEclips?知你所需,解你所惑!
想與更多人聊MyEclips?加入MyEclipse中國(官方2):742336981暢所欲言吧!
想及時獲取MyEclips資訊?掃描下方二維碼,MyEclips信息跟你走!
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請務必注明出處、不得修改原文相關鏈接,如果存在內(nèi)容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉(zhuǎn)載自: