Spring 2 和 JPA 简介(11)

试用 Spring 2 Web 应用程序

在这一节,将以编程方式向员工数据库添加一些数据,并试用员工信息应用程序。

在事务内添加数据到 DB2 Express-C

在可以试用应用程序之前,需要在数据库中有些员工数据。因为集成测试在每次运行时都会删除所有表(通过回滚事务),所以数据库不包含任何已经可以使用的数据。

当然,可以用 DB2 Express-C 工具手工输入数据。但在这里将学习如何用编程的方式添加数据。

集成测试基于 AbstractJpaTests 的一个精彩特性,是测试完成时数据库的所有变化都被回滚掉这一事实,这就允许下一步骤迅速执行。如果每个步骤都在事务中运行到结束,那么数据修改会在 RDBMS 中持久,这就需要在启动下一测试之前删除它们。所以在理论上,如果想向数据库添加数据,这个类一点用也没有。

幸运的是,在基于 AbstractJpaTests 的集成测试中修改的任何数据,都可以在测试中调用 setComplete() 方法,提交给 RDBMS。这个方法不是回滚数据,而是提交数据,从而让修改持久。

FillTableWithEmployeeInfo 类是 Spring2Tutorial 项目的一部分,如清单 30 所示。这个类利用这个功能把六个员工的信息保持到 DB2 Express-C。

清单 30. 通过 FillTableWithEmployeeInfo 把数据添加到数据库


package com.ibm.dw.spring2;

import java.util.Date;
import java.util.List;

import org.springframework.test.jpa.AbstractJpaTests;

public class FillTableWithEmployeeInfo extends AbstractJpaTests {

   private EmployeeService employeeService;

   public void setEmployeeService(EmployeeService employeeService) {
      this.employeeService = employeeService;
   }

   protected String[] getConfigLocations() {
      return new String[] { "classpath:/com/ibm/dw/spring2/dwspring2-service.xml" };
   }


   public void testTableFiller() {
           
      
      Employee emp1 = new Employee("0001", "Joe", "R","Smith", 
             "4853", "Engineer", 3, 'M',
              20000.00, 0.00, 0.00,
               new Address(10, "Walker Street")
              , new Date(), new Date());
   
      Employee emp2 = new Employee("0002", "John","T","Lockheed", 
            "4333", "Sales", 2, 'M',
            40000.00, 0.00, 5000.00,
            new Address(20, "Walker Street")
            , new Date(), new Date());
      
      Employee emp3 = new Employee("0003", "Mary","M","Johnson", 
            "4383", "Admin", 3, 'F',
            60000.00, 0.00, 390.00,
            new Address(123, "Booth Ave")
            , new Date(), new Date());
      
      Employee emp4 = new Employee("0004", "Mike","S","Lee", 
            "4322", "Sales", 3, 'M',
            30000.00, 0.00, 20000.00,
            new Address(7, "Wilard Drive")
            , new Date(), new Date());
      Employee emp5 = new Employee("0005", "Joan","K","Winfry", 
            "4113", "Marketing", 2, 'F',
            40000.00, 0.00, 0.00,
            new Address(1293, "Davis Blvd")
            , new Date(), new Date());
      
      Employee emp6 = new Employee("0006", "Steve","L","Bingham", 
            "4632", "Marketing", 3, 'M',
            50000.00, 0.00, 0.00,
            new Address(5, "Booth Ave")
            , new Date(), new Date());
      
      employeeService.save(emp1);
      employeeService.save(emp2);
      employeeService.save(emp3);
      employeeService.save(emp4);
      employeeService.save(emp5);
      employeeService.save(emp6);
   
      setComplete();
      
   }
}


在 Eclipse 的导航器视图,右击 FillTableWithEmployeeInfo.java 并选择 Run As... JUnit Test,用数据填充数据库。


使用员工信息应用程序

要在部署到 Tomcat 之后访问应用程序的主页,请在浏览器中输入以下 URL:http://localhost:8080/dwspring/home.cgi。这假设正在本地机器上运行 Tomcat 服务器。如果使用网络上的其他服务器,只要替换 URL 中的主机名即可。

应用程序的第一页,MainController 和 home.jsp,如图 14 所示:

图 14. 员工选择页面

每个员工编号都是一个可以点击的 URL 链接,点击之后显示包含选中员工的员工细节页面(图 15):

图 15. 员工细节页面

图 15 的页面由 EmpDetailsController 创建,通过 empdet.jsp 视图呈现。
fig14.jpg
fig15.jpg
2008-03-05_130710.gif
快乐渡过每一天,减肥坚持每一天