MyEclipse數據庫教程:使用Hibernate和Spring執行數據庫操作(一)
在本教程中,您將學習如何:
連接到數據庫
將Hibernate和Spring添加到項目中
通過對數據庫表進行逆向工程來生成實體
創建Spring Beans作為持久層和數據源
啟用Hibernate 3.x注釋支持
1、設置樣本數據庫
本教程中的示例使用了一個帶有用戶表和數據的MySQL 5實例,用到了以下文件準備樣本數據。在開始本教程之前,您必須建立一個數據庫。
2、連接到數據庫
單擊打開Database Explorer圖標
,選擇MyEclipse數據庫瀏覽器。
在數據庫瀏覽器中,單擊
,然后選擇新建。
從“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、創建一個啟用了Hibernate的項目
您可以為任何受支持的基礎項目(通常是Java或Web)啟用Hibernate和Spring。
選擇File>New>Project,展開Java,選擇Java項目,然后單擊下一步。
在“Project name”字段中輸入HibernateSpringProject,然后單擊“完成”。系統將提示您切換到Java透視圖。選擇“Yes”。
右鍵單擊該項目,選擇 Configure Facets > Install Hibernate Facet。注意,這里需要選擇4.1作為Hibernate規范版本。
點擊下一步。MyEclipse將創建一個新的hibernate.cfg.xml文件。
單擊Java package字段旁邊的New為session factory class創建一個新的軟件包,并命名為com.myeclipse.hibernatespring,然后單擊“完成”。
單擊下一步,從數據庫驅動程序下拉列表中選擇MySQL Connector/J,輸入密碼,然后單擊完成。
現在,該項目包含所有Hibernate和JDBC庫,并且hibernate.cfg.xml文件在“Configuration”編輯器中打開。配置文件包含來自連接配置文件的連接信息。當您對數據庫表進行反向工程時,實體將出現在配置文件的Mappings部分。
4、將Spring Facet添加到項目中
對于小型應用程序來說,Spring并不太適用,但是當您看到使用Spring通過簡單地調整bean配置文件中的引用來交換代碼庫的整個部分有多么容易時,您就會意識到該工具的功能真的很強大。最明顯的是,使用Spring來測試將會簡單很多。例如,您可以交換一個持久性實現,該實現將其所有調用都發送給嵌入式DBMS,或者記錄其所有活動。然后,當應用程序部署到生產環境中時,將持久性實現切換回使用主DBMS的代碼,這些代碼不使用日志記錄就能提高性能。
右鍵單擊該項目,然后選擇 Configure Facets > Install Spring Facet
接受默認的Spring版本和目標運行時,然后單擊Next。
MyEclipse將創建一個新的applicationContext.xml文件。點擊完成。
現在,這個項目就同時具有Hibernate和Spring功能。
5、逆向工程數據庫表
對數據庫表進行反向工程時,會在項目中生成Hibernate(Java)對象。由于該項目是Hibernate-Spring項目,所以MyEclipse在逆向工程期間提供的不僅僅是普通DAO,而是Spring DAO選項。這就意味著系統將自動創建DAO Spring bean,這些bean的sessionFactory屬性已經正確配置為對Hibernate SessionFactory的現有Spring引用。接下來,我們將通過幾個步驟使用簡單的逆向工程形式,讓向導獲取所有默認值。但是,為了實現最大程度的控制,您可以使用“Nxt”按鈕,通過向導一步一步地瀏覽詳細信息,比如主鍵生成策略、對象名稱、類型等。
切換回數據庫瀏覽器透視圖。
在數據庫瀏覽器中,將MySQL Connector/J擴展到用戶表。
右鍵單擊用戶表,然后選擇“Hibernate Reverse Engineering”。
單擊Java src文件夾旁邊的瀏覽,展開 HibernateSpringProject > src,選擇com.myeclipse.hibernatespring,然后單擊確定。
選擇 Create POJO <> DB 表映射信息復選框,選擇Java數據對象復選框,再選擇Java數據訪問對象(DAO)復選框,然后單擊完成。您將收到系統關于切換到Hibernate透視圖的提示,只需要單擊“Yes”即可。
將Hibernate類生成到Java包中,并創建Spring Bean。
6、編寫 Hibernate-Spring 代碼
設置好項目后,就可以開始編寫代碼了。本過程需要兩段代碼:
業務邏輯:表示應用程序代碼的主要方法。
持久層:這是業務邏輯應用于數據庫功能的應用程序的抽象部分。如果使用的所有業務邏輯都是持久性層,那么您可以在這一層后面隱藏它工作的一些細節。本例使用Spring將執行數據庫操作所需的必要DAO引用填充到持久層,這樣做的好處是業務邏輯不需要了解任何相關信息。
將每個名為BusinessLogic.java和PersistenceLayer.java的類添加到com.myeclipse.hibernatespring包。從持久性層開始,因為它位于剛剛生成的所有代碼和在業務邏輯層中編寫的代碼之間。它是持久化技術(Hibernate)和由Spring管理的業務邏輯(main方法)之間的抽象。將以下代碼添加到PersistenceLayer類,這個類的目的是獲得一個由Spring注入的UserDAO實例,然后使用該引用來實現save/find/update和delete操作(不需要調用代碼的)。這使您不用完全更改應用程序的代碼就能輕松、快速地修改應用程序中的持久性代碼。更具體地說,如果您想更改PersistenceLayer的實現方式,比如說要更好地管理異常、事務或其他任何事情,可以通過編輯此類來完成。只要所有方法標簽保持不變,就不需要重構整個應用程序。
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實現。例如,該實現模擬數據庫操作,但實際上并不執行這些操作。現在您已經實現了PersistenceLayer,接下來將以下業務邏輯(或主要方法實現)代碼添加到BusinessLogic類。業務邏輯(主要方法)利用抽象的持久層來添加/查找/更新以及從數據庫中刪除用戶。
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); } }
這個代碼具有以下功能:
創建一個新用戶來插入數據庫。它使用MyEclipse在從數據庫逆向工程用戶表時生成的用戶POJO。
創建一個bean工廠。它的作用是讀入Spring bean配置文件,然后向“工廠”提供一個實例,該“工廠”可用于根據該文件中的規范獲取bean的實例。這是Spring的“入口點”。
創建PersistenceLayer實例,這樣就可以執行數據庫操作了!注意,為了正確填充UserDAO引用,您必須使用bean工廠來獲取實例。
使用創建的PersistenceLayer實例將新用戶保存到數據庫。注意,由于所有調用都通過PersistenceLayer進行,因此BusinessLogic類不了解UserDAO類或任何底層詳細信息。
在保存時,分配給用戶的ID將從數據庫中重新加載用戶,通過這樣的方式來檢查并確保所有值都是正確的。
更新用戶名查看更新記錄是否有效。
重新從數據庫加載用戶,以確保修改的地方已完全更新。
從數據庫中刪除用戶。
更多“使用Hibernate和Spring執行數據庫操作”的教程內容,請點擊此處查看>>>
想進一步了解MyEclips?知你所需,解你所惑!
想與更多人聊MyEclips?加入MyEclipse中國(官方2):742336981暢所欲言吧!
想及時獲取MyEclips資訊?掃描下方二維碼,MyEclips信息跟你走!