基于Struts+Spring+JDBC架构的课程设计实训教学示例项目——《网上银行账户管理系统》——构建项目数据库连接组件和测试(第3部分)_第1页
基于Struts+Spring+JDBC架构的课程设计实训教学示例项目——《网上银行账户管理系统》——构建项目数据库连接组件和测试(第3部分)_第2页
基于Struts+Spring+JDBC架构的课程设计实训教学示例项目——《网上银行账户管理系统》——构建项目数据库连接组件和测试(第3部分)_第3页
基于Struts+Spring+JDBC架构的课程设计实训教学示例项目——《网上银行账户管理系统》——构建项目数据库连接组件和测试(第3部分)_第4页
基于Struts+Spring+JDBC架构的课程设计实训教学示例项目——《网上银行账户管理系统》——构建项目数据库连接组件和测试(第3部分)_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、基于Struts+Spring+JDBC架构的课程设计实训教学例如工程?网上银行账户管理系统?构建工程数据库连接组件和测试第3/6局部1.1.1 对前面的数据库连接ConnectDBBean组件应用单元测试1、单元测试1单元测试有关的概念2为什么要应用它?3如何应用它?-应用JUnit框架2、添加一个测试工程-应该将测试工程和被测试的工程相互别离!1添加一个Java测试工程2工程的名称为TestWebBank3最后为下面的状态3、在测试工程中添加对应用工程的引用为了能够在测试工程中对被测试工程中的各个类进行使用,需要在测试工程中添加对应用工程的引用。4、在测试工程中添加JUnit框架有关的系统

2、包文件1在Eclipse中直接添加JUnit的系统包文件3注意:JUnit4.X版提供了许多方便单元测试的各个功能!5、在测试工程中添加测试用例TestCase类测试类什么是测试用例?编程要点?1添加测试用例类2类名称为TestConnectDBBean添加类名称为TestConnectDBBean,包名称为, 被测试的类选择为。3点击“Next下一步按钮,将出现下面的状态。4编程该测试用例类中的各个测试方法5最终的程序代码package com.px1987.webbank.daotest;import static org.junit.Assert.*;import java.sql.Co

3、nnection;import org.junit.After;import org.junit.Assert;import org.junit.Before;import org.junit.Test;import com.px1987.webbank.config.ClassNameConfig;import er.ConnectDBInterface;import com.px1987.webbank.exception.WebBankException;import com.px1987.webbank.factory.Connect

4、DBFactory;public class TestConnectDBBean ConnectDBInterface connectDBBean=null;String connectDBBeanClassName=null;Beforepublic void setUp() throws Exception connectDBBeanClassName=ClassNameConfig.getProperty("connectDBBean.className");connectDBBean=new ConnectDBFactory().newConnectDBBean(c

5、onnectDBBeanClassName);Afterpublic void tearDown() throws Exception connectDBBean=null;Testpublic void testCloseDBCon()throws WebBankException connectDBBean.closeDBCon();boolean isDBConnectionClose=connectDBBean.isDBConnectionClose();Assert.assertTrue(isDBConnectionClose); /断言Testpublic void testGet

6、Connection() throws WebBankExceptionConnection returnDBCon=connectDBBean.getConnection();Assert.assertNotNull(returnDBCon); /断言注意:由于采用的是JUnit4.0系统库,现在改变为“Java标注的方式实现-其中的Before、After和Test等符号。在JUnit4中应用了“元数据-在Java中也叫注释或者注解。6、执行该测试用例类1启动测试运行器2测试用例类的执行结果如下3将数据库效劳器停止以测试是否出现错误4再测试一次,将出现下面的错误状态5再次理解单元测试的作用

7、! 6测试的执行流程1.1.2 Java中的注解Annotations1、Java中的注解的作用1meta-data元数据 元数据是“描述数据的数据 。一般来说它们可以被用来生成文档,检查代码间依赖关系,帮助编译器作语法检查。时下比拟流行的工具有xdoclet等。而对于文档生成早已经有了javadoc工具的完美表现,而对于代码检查,如今java也提供了语言级的支持。2Java中的注解后面加一个名称不会直接影响程序的语义而开发和部署工具那么可以读取这些注解信息,并作相应处理,如生成额外的Java源代码、XML文档、或者其他将与包含注解的程序一起使用的物件。注解不仅仅被用来产生Javadoc,更重

8、要的,注解使得代码的编译期检查更加有效和方便,同时也增强了代码的描述能力。有一些注解是随着J2SE(TM) 5.0一起发布的,我们可以直接使用。除此之外,我们也可以很方便的实现自定义的注解。在此根底上,很多以前我们只能靠反射机制来完成的功能也变得更加容易实现。 以前的诸如JavaDoc的标注,尤其deprecated,都是注解,只不过这一次的更新将注解推到了Java历史上前所未有的高度。通过注解,我们可以实现原先相对复杂的高级功能。2、JDK5中内带的注解Annotation提供一种机制,将程序的元素如:类,方法,属性,参数,本地变量,包和元数据联系起来。这样编译器可以将元数据存储在Class

9、文件中。 这样虚拟机和其它对象可以根据这些元数据来决定如何使用这些程序元素或改变它们的行为。在JDK中提供了一些专门为并发编程准备的 Annotation。主要包括下面的三类。1类 Annotation注解这些注解是针对类的。主有要以下三个:Immutable、ThreadSafe和NotThreadSafe。1) ThreadSafe 是表示这个类是线程平安的。具体是否真平安,那要看实现者怎么实现的了,反正打上这个标签只是表示一下。不线程平安的类打上这个注解也没事儿。2) Immutable 表示,类是不可变的,包含了ThreadSafe的意思。3) NotThreadSafe 表示这个类不

10、是线程平安的。如果是线程平安的非要打上这个注解,那也不会报错。这三个注解,对用户和维护者是有益的,用户可以立即看出来这个类是否是线程平安的,维护者那么是可以根据这个注解,重点检查线程平安方面。另外,代码分析工具可能会利用这个注解。2域 Annotation注解域注解是对类里面成员变量加的注解。3方法 Annotation注解方法注解是对类里面方法加的注解。注意:annotaion不能影响程序代码的执行,无论增加、删除 annotation,代码都始终如一的执行。另外,尽管一些annotation通过java的反射api方法在运行时被访问,而java语言解释器在工作时忽略了这些annotatio

11、n。正是由于java虚拟机忽略了annotation,导致了annotation类型在代码中是“不起作用的;只有通过某种配套的工具才会对annotation类型中的信息进行访问和处理。1Deprecated:对不再使用的方法进行注释 2Override:指明注释的方法覆盖超类的方法 3SuppressWarnings:阻止编译器的警告,例:当类型不平安时 ,被用于有选择的关闭编译器对类、方法、成员变量、变量初始化的警告。 4、理解在TestConnectDBBean测试用例类中所出现的各种Annotation注解1.1.3 对工程中的数据库连接进行性能测试以发行出系统性能瓶颈点1、添加一个性能

12、测试的类TestConnectionPerformance1包名称为com.px1987.,类名称为TestConnectionPerformance2编程该TestConnectionPerformance类代码package com.px1987.webbank.performance;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.sql.SQLException;import com.px1987.webbank.config.Class

13、NameConfig;import er.ConnectDBInterface;import com.px1987.webbank.exception.WebBankException;import com.px1987.webbank.factory.ConnectDBFactory;public class TestConnectionPerformance private String selectSqlStatement = "select * from userInfo"private ConnectDBInte

14、rface connectDBBean = null;private String connectDBBeanClassName = null;public TestConnectionPerformance() throws WebBankException ,SQLExceptionconnectDBBeanClassName=ClassNameConfig.getProperty("connectDBBean.className");connectDBBean=new ConnectDBFactory().newConnectDBBean(connectDBBeanC

15、lassName); long startTimer = System.currentTimeMillis();/先获取当前的毫秒数int loopIndex;for (loopIndex = 0; loopIndex < 50; loopIndex +) Connection oneConnection = connectDBBean.getConnection();PreparedStatement onePreparedStatement = oneConnection.prepareStatement(selectSqlStatement);ResultSet oneResult

16、Set = onePreparedStatement.executeQuery();while (oneResultSet.next() oneResultSet.close();onePreparedStatement.close();connectDBBean.closeDBCon();System.out.println("经过"+loopIndex+"次的循环调用,花费的总时间为:" +(System.currentTimeMillis() - startTimer) + "msn");public static void m

17、ain(String args) throws WebBankException,SQLExceptionnew TestConnectionPerformance();2、执行的结果1.1.4 应用DBCP组件为系统提供数据库连接池功能优化数据库连接,并体验面向接口编程所带来的优点1、请大家思考1JDBC直接连接的主要问题是什么?对于共享资源的使用的设计方法,有一个很著名的设计模式:应用资源池(Resource Pool)。该模式是为了解决资源的频繁分配和释放所造成的问题而提出的!而解决常规的JDBC所带来的各种问题,可以采用数据库连接池技术。2什么是数据库连接池Pool的连接?-缓存已经存

18、在的数据库连接对象, 为什么要应用?数据库连接池Connection Pool池是一个很普遍的概念,和缓冲存储有机制相近的地方,都是缩减了访问的环节,但它更注重于资源的共享。对于访问数据库来说,建立连接的代价比拟昂贵,因此,数据持久层建立了“连接池以提高访问的性能。数据持久层把连接当作对象,整个系统启动后,连接池首先建立假设干连接,访问本来需要与数据库连接的区域,都改为和池相连,池临时分配连接供访问使用,结果返回后,访问将连接交还。这种设计消除了JDBC与数据源建立连接的延时,同时在应用级提供了对数据源的并发访问。2、本工程方案采用DBCP-添加DBCP的驱动程序*.jar包文件1导入DBCP

19、的驱动程序*.jar包文件2最后为下面的状态3、为ConnectDBInterface接口提供一个新的实现类DBCPConnectDBBean1类名称为DBCPConnectDBBean,包名称为注意并体验“OCP原那么在代码功能扩展时的要求当系统中的某个方面的 “需求发生变化时,我们不应该直接修改原来的功能实现类,而只需要添加一个新的功能实现类以替换原来的功能实现类。由于在数据库连接组件的设计方面,我们应用了接口隔离的手段,从而使得本设计是满足OCP原那么的。2编程该实现类package com.px1987.webbank.dao.imple;import java.sql.Connect

20、ion;import java.sql.SQLException;import java.util.logging.Level;import java.util.logging.Logger;import org.apache mons.dbcp.BasicDataSource;import com.px1987.webbank.config.ClassNameConfig;import er.ConnectDBInterface;import com.px1987.webbank.exception.WebBankException;pub

21、lic class DBCPConnectDBBean implements ConnectDBInterface private java.sql.Connection con = null;private static BasicDataSource oneDataSourceImple=null;private Logger logger = Logger.getLogger(this.getClass().getName(); private static String JDBC_DBDriver_ClassName =null;private static String JDBC_D

22、SN_URL = null;private static String JDBC_dbUserName=null;private static String JDBC_dbUserPassWord=null;private static String JDBC_dbcp_maxActive = null;static JDBC_DBDriver_ClassName = ClassNameConfig.getProperty("JDBC_DBDriver_ClassName");JDBC_DSN_URL = ClassNameConfig.getProperty("

23、JDBC_DSN_URL");JDBC_dbUserName = ClassNameConfig.getProperty("JDBC_dbUserName");JDBC_dbUserPassWord = ClassNameConfig.getProperty("JDBC_dbUserPassWord");JDBC_dbcp_maxActive = ClassNameConfig.getProperty("JDBC_dbcp_maxActive");oneDataSourceImple=new BasicDataSource(

24、);oneDataSourceImple.setDriverClassName(JDBC_DBDriver_ClassName);oneDataSourceImple.setUrl(JDBC_DSN_URL);oneDataSourceImple.setUsername(JDBC_dbUserName);oneDataSourceImple.setPassword(JDBC_dbUserPassWord);oneDataSourceImple.setMaxActive(Integer.parseInt(JDBC_dbcp_maxActive); /最大的连接数目oneDataSourceImple.setDefaultAutoCommit(true);public void initDBConnection() throws WebBankExceptiontrycon=oneDataSourceImple.getConnection();catch (java.sql.SQLException e)logger.log(Level.INFO, e.getMessage();throw new WebBankException("不能正确地连

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论