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信息跟你走!