it167.com  设为主页
 收藏本站
 
  资讯:业界动态 | 软件动态 | 人物专栏 | 安全资讯 | 网络生活 | 电子商务 | 小游戏 | 视频 | 美女图片 | 音乐
  网络编程 | 网站运营 | 网页制作 | 图形图象 | 操作系统 | 媒体动画 | 软件教学 | 网络应用 | 邮件系统 | 网络安全 | 认证考试
asp | .net | php | jsp | Sql | java | Dreamweaver | FrontPages | Javascript | css | Coreldraw | photoshop | Flash | Coreldraw
当前位置: > 主页>网络编程>Java>JAVA入门教程>Spring数据访问对象(DAO)框架入门(1)
最新新闻

·机会与整合 边缘化互联
·TOM-Skype新增三大本地
·雅虎抢闸邮箱竞赛 网易
·新浪抢攻北京奥运
·洞悉网络口碑的掘金机会
·拆解网络病毒黑金交易
·木马下载器近期出现新变
·《互联网周刊》第17期文
·Web2.0是否催生自吹自擂
·三张宝宝裸照招来MSN封
热门新闻
·jsp 下实现防止重复在线
·一个必看的Java程序
·存储过程
·构建自己的基于Java的超
·构建自己的基于Java的超
·Web应用中的中文问题
·学习MySQL常用操作命令
·MySQL中修改密码及访问
·Hibernate 3新增XML关系
·java实现ftp下载文件
推荐新闻
 
 

Spring数据访问对象(DAO)框架入门(1) 

作者:   来源:it167   点击:   日期:2007-01-28

第四步:测试- 最后是编写JUnit测试类。依照Spring的方式,需要在容器外部进行测试。然而,从第三步中的配置文件可以清楚地看到,我们一直在使用WebLogic Server连接池。

package com.bea.dev2dev.business;

import java.util.*;

import junit.framework.*;

import org.springframework.context.ApplicationContext;

import org.springframework.context.support.FileSystemXmlApplicationContext;

public class EmployeeBusinessServiceImplTest extends TestCase {

private IEmployeeBusinessService empBusiness;

private Map salaryMap;

List expResult;

protected void setUp() throws Exception {

initSpringFramework();

initSalaryMap();

initExpectedResult();

}

private void initExpectedResult() {

expResult = new ArrayList();

Map tempMap = new HashMap();

tempMap.put("EMP_NO",new Integer(1));

tempMap.put("EMP_NAME","John");

tempMap.put("SALARY",new Double(46.11));

expResult.add(tempMap);

}

private void initSalaryMap() {

salaryMap = new HashMap();

salaryMap.put("MIN_SALARY","1");

salaryMap.put("MAX_SALARY","50");

}

private void initSpringFramework() {

ApplicationContext ac = new FileSystemXmlApplicationContext

("C:/SpringConfig/Spring-Config.xml");

empBusiness =

(IEmployeeBusinessService)ac.getBean("EMP_BUSINESS");

}

protected void tearDown() throws Exception {

}

/**

* Test of getEmployeesWithinSalaryRange method,

* of class

* com.bea.dev2dev.business.EmployeeBusinessServiceImpl.

*/

public void testGetEmployeesWithinSalaryRange() {

List result = empBusiness.getEmployeesWithinSalaryRange

(salaryMap);

assertEquals(expResult, result);

}

}

使用绑定变量

到目前为止,我们搜索了工资介于最低值和最高值之间的雇员。假设在某种情形下,业务用户想要颠倒这一范围。DAO代码很脆弱,将不得不通过更改来满足要求的变化。这个问题在于使用了静态的位置绑定变量(用“?”表示)。Spring DAO通过支持命名的绑定变量来挽救这个情况。修改的IEmployeeDAO清单引入了命名的绑定变量(用“:<some name>”表示)。注意查询中的变化,如下所示:

import java.util.Map;

public interface IEmployeeDAO {

//SQL String that will be executed

public String FIND_BY_SAL_RNG = "SELECT EMP_NO, EMP_NAME, "

+ "SALARY FROM EMP WHERE SALARY >= :max AND SALARY <= :min";

//Returns the list of employees falling into the given salary range

//The input parameter is the immutable map object obtained from

//the HttpServletRequest. This is an early refactoring based on

//- "Introduce Parameter Object"

public List findBySalaryRange(Map salaryMap);

}

多数JDBC驱动程序仅支持位置绑定变量。所以,Spring DAO在运行时将这个查询转换成位置绑定、基于变量的查询,并且设置正确的绑定变量。现在,为了完成这些任务,需要使用NamedParameterJdbcDaoSupport类和NamedParameterJdbcTemplate类,以代替JdbcDaoSupport和JdbcTemplate.下面就是修改后的DAO实现类:

import org.springframework.jdbc.core.namedparam.NamedParameterJdbcDaoSupport;

import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;

public class EmployeeDAOImpl extends NamedParameterJdbcDaoSupport

implements IEmployeeDAO{

public List findBySalaryRange(Map salaryMap){

NamedParameterJdbcTemplate tmplt =

this.getNamedParameterJdbcTemplate();

return tmplt.queryForList(IEmployeeDAO.FIND_BY_SAL_RNG

,salaryMap);

}

}

NamedParameterJdbcDaoSupport的getNamedParameterJdbcTemplate()方法返回一个NamedParameterJdbcTemplate实例,该实例由数据源句柄进行了预初始化。Spring Beanfactory执行初始化任务,从配置文件获得所有的详细信息。在执行时,一旦将命名的参数替换成位置占位符,NamedParameterJdbcTemplate就将操作委托给JdbcTemplate.可见,使用命名的参数使得DAO方法不受底层SQL声明任何更改的影响。



共5页: 上一页 [1] [2] [3] 4 [5] 下一页
文章评论】 【收藏本文】 【推荐好友】 【打印本文】 【论坛讨论

   相关文章:
·Java文件操作大全(1) ·JAVA开发者应该去的20个英文网站
·Java: JNI完全手册 ·由基本概念开始全面认识Java
·J2ee学习流程简介 ·Java:Struts入门初步知识(1)

   文章评论:(0条)
  
 请留名: 匿名评论   点击查看所有评论 网管论坛
 

  责任编辑:it167  声明:刊登此文章是为了传递更多信息,文章内容仅供参考,转载请注明出处。