MyEclipse数据库教程:使用Hibernate和Spring执行数据库操作(一)

将Spring与Hibernate结合使用可在持久性代码和业务逻辑之间添加一个抽象级别,以控制底层的持久性引擎。本教程适用于熟悉Spring以及Java中的依赖注入和持久性的人员。

在本教程中,您将学习如何:

  • 连接到数据库

  • 将Hibernate和Spring添加到项目中

  • 通过对数据库表进行逆向工程来生成实体

  • 创建Spring Beans作为持久层和数据源

  • 启用Hibernate 3.x注释支持

下载MyEclipse  

1、设置样本数据库

本教程中的示例使用了一个带有用户表和数据的MySQL 5实例,用到了以下文件准备样本数据。在开始本教程之前,您必须建立一个数据库。

  • 示例数据库内容

  • 为用户表创建SQL脚本

2、连接到数据库

  • 单击打开Database Explorer图标

    MyEclipse数据库教程:使用Hibernate和Spring执行数据库操作(一) ,选择MyEclipse数据库浏览器。
  • 在数据库浏览器中,单击

    MyEclipse数据库教程:使用Hibernate和Spring执行数据库操作(一),然后选择新建。
  • 从“Driver Template”下拉菜单中选择“MySQL Connector/J”,在“Driver name field”字段中键入MySQL Connector/J,将

MyEclipse数据库教程:使用Hibernate和Spring执行数据库操作(一)
  • 单击添加JAR。导航到MySQL Connector/J JAR文件的位置,然后选择文件。“Driver classname field”将自动填充,然后点击Finish。

MyEclipse数据库教程:使用Hibernate和Spring执行数据库操作(一)
  • 在DB Explorer中选择MySQL Connector/J,然后单击

    MyEclipse数据库教程:使用Hibernate和Spring执行数据库操作(一) 打开链接。

3、创建一个启用了Hibernate的项目

您可以为任何受支持的基础项目(通常是Java或Web)启用Hibernate和Spring。

  • 选择File>New>Project,展开Java,选择Java项目,然后单击下一步。

MyEclipse数据库教程:使用Hibernate和Spring执行数据库操作(一)
  • 在“Project name”字段中输入HibernateSpringProject,然后单击“完成”。系统将提示您切换到Java透视图。选择“Yes”。

MyEclipse数据库教程:使用Hibernate和Spring执行数据库操作(一)
  • 右键单击该项目,选择 Configure Facets > Install Hibernate Facet。注意,这里需要选择4.1作为Hibernate规范版本。

MyEclipse数据库教程:使用Hibernate和Spring执行数据库操作(一)
  • 点击下一步。MyEclipse将创建一个新的hibernate.cfg.xml文件。

MyEclipse数据库教程:使用Hibernate和Spring执行数据库操作(一)
  • 单击Java package字段旁边的New为session factory class创建一个新的软件包,并命名为com.myeclipse.hibernatespring,然后单击“完成”。

MyEclipse数据库教程:使用Hibernate和Spring执行数据库操作(一)
  • 单击下一步,从数据库驱动程序下拉列表中选择MySQL Connector/J,输入密码,然后单击完成。

MyEclipse数据库教程:使用Hibernate和Spring执行数据库操作(一)

hibernate_caps_and_config_file2.png

4、将Spring Facet添加到项目中

对于小型应用程序来说,Spring并不太适用,但是当您看到使用Spring通过简单地调整bean配置文件中的引用来交换代码库的整个部分有多么容易时,您就会意识到该工具的功能真的很强大。最明显的是,使用Spring来测试将会简单很多。例如,您可以交换一个持久性实现,该实现将其所有调用都发送给嵌入式DBMS,或者记录其所有活动。然后,当应用程序部署到生产环境中时,将持久性实现切换回使用主DBMS的代码,这些代码不使用日志记录就能提高性能。

  • 右键单击该项目,然后选择 Configure Facets > Install Spring Facet

  • 接受默认的Spring版本和目标运行时,然后单击Next。

  • MyEclipse将创建一个新的applicationContext.xml文件。点击完成。

MyEclipse数据库教程:使用Hibernate和Spring执行数据库操作(一)

现在,这个项目就同时具有Hibernate和Spring功能。

MyEclipse数据库教程:使用Hibernate和Spring执行数据库操作(一)

5、逆向工程数据库表

对数据库表进行反向工程时,会在项目中生成Hibernate(Java)对象。由于该项目是Hibernate-Spring项目,所以MyEclipse在逆向工程期间提供的不仅仅是普通DAO,而是Spring DAO选项。这就意味着系统将自动创建DAO Spring bean,这些bean的sessionFactory属性已经正确配置为对Hibernate SessionFactory的现有Spring引用。接下来,我们将通过几个步骤使用简单的逆向工程形式,让向导获取所有默认值。但是,为了实现最大程度的控制,您可以使用“Nxt”按钮,通过向导一步一步地浏览详细信息,比如主键生成策略、对象名称、类型等。

  • 切换回数据库浏览器透视图。

  • 在数据库浏览器中,将MySQL Connector/J扩展到用户表。

MyEclipse数据库教程:使用Hibernate和Spring执行数据库操作(一)
  • 右键单击用户表,然后选择“Hibernate Reverse Engineering”。

  • 单击Java src文件夹旁边的浏览,展开 HibernateSpringProject > src,选择com.myeclipse.hibernatespring,然后单击确定。

MyEclipse数据库教程:使用Hibernate和Spring执行数据库操作(一)
  • 选择 Create POJO <> DB 表映射信息复选框,选择Java数据对象复选框,再选择Java数据访问对象(DAO)复选框,然后单击完成。您将收到系统关于切换到Hibernate透视图的提示,只需要单击“Yes”即可。

MyEclipse数据库教程:使用Hibernate和Spring执行数据库操作(一)
  • 将Hibernate类生成到Java包中,并创建Spring Bean。

MyEclipse数据库教程:使用Hibernate和Spring执行数据库操作(一)

MyEclipse数据库教程:使用Hibernate和Spring执行数据库操作(一)

6、编写 Hibernate-Spring 代码

设置好项目后,就可以开始编写代码了。本过程需要两段代码:

  • 业务逻辑:表示应用程序代码的主要方法。

  • 持久层:这是业务逻辑应用于数据库功能的应用程序的抽象部分。如果使用的所有业务逻辑都是持久性层,那么您可以在这一层后面隐藏它工作的一些细节。本例使用Spring将执行数据库操作所需的必要DAO引用填充到持久层,这样做的好处是业务逻辑不需要了解任何相关信息。

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入MyEclipse中国(官方2):742336981畅所欲言吧!

想及时获取MyEclips资讯描下方二维码,MyEclips信息跟你走!

MyEclipse数据库教程:使用Hibernate和Spring执行数据库操作(一)

标签:

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2019年10月1日
下一篇 2019年10月1日

相关推荐

发表回复

登录后才能评论