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

JdbcTemplate是Spring JDBC框架中最重要的类。引用文献中的话:“它简化了JDBC的使用,有助于避免常见的错误。它执行核心JDBC工作流,保留应用代码以提供SQL和提取结果。”这个类通过执行下面的样板任务来帮助分离JDBC DAO代码的静态部分:

◆从数据源检索连接。

◆准备合适的声明对象。

◆执行SQL CRUD操作。

◆遍历结果集,然后将结果填入标准的collection对象。

◆处理SQLException异常并将其转换成更加特定于错误的异常层次结构。

利用Spring DAO重新编写

既然已基本理解了Spring JDBC框架,现在要重新编写已有的代码。下面将逐步讲述如何解决前几节中提到的问题。

第一步:修改DAO实现类- 现在从JdbcDaoSupport扩展出EmployeeDAOImpl以获得JdbcTemplate.

import org.springframework.jdbc.core.support.JdbcDaoSupport;

import org.springframework.jdbc.core.JdbcTemplate;

public class EmployeeDAOImpl extends JdbcDaoSupport

implements IEmployeeDAO{

public List findBySalaryRange(Map salaryMap){

Double dblParams [] = {Double.valueOf((String)

salaryMap.get("MIN_SALARY"))

,Double.valueOf((String)

salaryMap.get("MAX_SALARY"))

};

//The getJdbcTemplate method of JdbcDaoSupport returns an

//instance of JdbcTemplate initialized with a datasource by the

//Spring Bean Factory

JdbcTemplate daoTmplt = this.getJdbcTemplate();

return daoTmplt.queryForList(FIND_BY_SAL_RNG,dblParams);

}

}

在上面的清单中,传入参数映射中的值存储在双字节数组中,顺序与SQL字符串中的位置参数相同。queryForList()方法以包含Map(用列名作为键,一项对应一列)的List(一项对应一行)的方式返回查询结果。稍后我会说明如何返回传输对象列表。

从简化的代码可以明显看出,JdbcTemplate鼓励重用,这大大削减了DAO实现中的代码。JDBC和collection包之间的紧密耦合已经消除。由于JdbcTemplate方法可确保在使用数据库资源后将其按正确的次序释放,所以JDBC的资源耗损不再是一个问题。

另外,使用Spring DAO时,不必处理异常。JdbcTemplate类会处理SQLException,并根据SQL错误代码或错误状态将其转换成特定于Spring异常的层次结构。例如,试图向主键列插入重复值时,将引发DataIntegrityViolationException.然而,如果无法从这一错误中恢复,就无需处理该异常。因为Spring DAO的根异常类DataAccessException是运行时异常类,所以可以这样做。值得注意的是Spring DAO异常独立于数据访问实现。如果实现是由O/R映射解决方案提供,就会抛出同样的异常。

第二步:修改业务服务- 现在业务服务实现了一个新方法setDao(),Spring容器使用该方法传递DAO实现类的引用。该过程称为“设置方法注入(setter injection)”,通过第三步中的配置文件告知Spring容器该过程。注意,不再需要使用DAOFactory,因为Spring BeanFactory提供了这项功能:

public class EmployeeBusinessServiceImpl

implements IEmployeeBusinessService {

IEmployeeDAO empDAO;

public List getEmployeesWithinSalaryRange(Map salaryMap){

List empList = empDAO.findBySalaryRange(salaryMap);

return empList;

}

public void setDao(IEmployeeDAO empDAO){

this.empDAO = empDAO;

}

}

请注意P2I的灵活性;即使极大地改动DAO实现,业务服务实现也只需少量更改。这是由于业务服务现在由Spring容器进行管理。

第三步:配置Bean Factory- Spring bean factory需要一个配置文件进行初始化并启动Spring框架。这个配置文件包含所有业务服务和带Spring bean容器的DAO实现类。除此之外,它还包含用于初始化数据源和JdbcDaoSupport的信息:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"

"http://www.springframework.org/dtd/spring-beans.dtd">

<beans>

<!-- Configure Datasource -->

<bean id="FIREBIRD_DATASOURCE"

class="org.springframework.jndi.JndiObjectFactoryBean">

<property name="jndiEnvironment">

<props>

<prop key="java.naming.factory.initial">

weblogic.jndi.WLInitialContextFactory

</prop>

<prop key="java.naming.provider.url">

t3://localhost:7001

</prop>

</props>

</property>

<property name="jndiName">

<value>

jdbc/DBPool

</value>

</property>

</bean>

<!-- Configure DAO -->

<bean id="EMP_DAO" class="com.bea.dev2dev.dao.EmployeeDAOImpl">

<property name="dataSource">

<ref bean="FIREBIRD_DATASOURCE"></ref>

</property>

</bean>

<!-- Configure Business Service -->

<bean id="EMP_BUSINESS"

class="com.bea.dev2dev.sampleapp.business.EmployeeBusinessServiceImpl">

<property name="dao">

<ref bean="EMP_DAO"></ref>

</property>

</bean>

</beans>

这个Spring bean容器通过调用JdbcDaoSupport提供的setDataSource()方法,设置包含DAO实现的数据源对象。



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

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

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

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