当前位置:主页 >09电竞平台

09电竞平台:SPRING数据访问对象(DAO)框架入门

发布时间:02月07日 阅读:676



择要

J2EE利用法度榜样中的营业组件平日应用JDBC API造访和变动关系数据库中的持久数据。这常常导致持久性代码与营业逻辑发生混杂,这是一种不好的习气。数据造访工具(DAO)设计模式经由过程把持久性逻辑分成多少数据造访类来办理这一问题。

本文是一篇关于DAO设计模式的入门文章,凸起讲述了它的优点和不够之处。别的,本文还先容了Spring 2.0 JDBC/DAO框架并示范了它若何妥善地办理传统DAO设计中的缺陷。

传统的DAO设计

数据造访工具(DAO)是一个集成层设计模式,如Core J2EE Design Pattern 图书所归纳。它将持久性存储造访和操作代码封装到一个零丁的层中。本文的高低文中所提到的持久存储器是一个RDBMS.

这一模式在营业逻辑层和持久存储层之间引入了一个抽象层,如图1所示。营业工具经由过程数据造访工具来造访RDBMS(数据源)。抽象层改良了利用法度榜样代码并引入了机动性。理论上,当数据源改变时,比如替换数据库供应商或是数据库的类型时,仅需改变数据造访工具,从而把对营业工具的影响降到最低。

图1. 利用法度榜样布局,包括DAO之前和之后的部分

解说了DAO设计模式的根基常识,下面将编写一些代码。下面的例子来自于一个公司域模型。简而言之,这家公司有几位员工事情在不合的部门,如贩卖部、市场部以及人力资本部。为了简单起见,我们将集中评论争论一个称作“雇员”的实体。

针对接口编程

DAO设计模式带来的机动性首先要归功于一个工具设计的最佳实践:针对接口编程(P2I)。这一原则规定实体必须实现一个供调用法度榜样而不是实体自身应用的接口。是以,可以轻松调换成不合的实现而对客户端代码只孕育发生很小的影响。

我们将据此应用findBySalaryRange()行径定义Employee DAO接口,IEmployeeDAO.营业组件将经由过程这个接口与DAO交互:

import java.util.Map;

public interface IEmployeeDA09电竞平台O {

//SQL String that will be executed

public String FIND_B09电竞平台Y_SAL_RNG = "SELECT EMP_NO, EMP_NAME, "

+ "SALARY FROM EMP WHERE SALARY >= ? AND SALARY

供给DAO实现类

接口已经定义,现在必须供给Employee DAO的详细实现,EmployeeDAOImpl:

import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.util.List;

import java.util.ArrayList;

import java.util.Map;

import com.bea.dev2dev.to.EmployeeTO;

public class EmployeeDAOImpl implements IEmployeeDAO{

public List findBySalaryRange(Map salaryMap)

{

Connection conn = null;

PreparedStatement pstmt = null;

ResultSet rs = null;

Lis09电竞平台t empList = new ArrayList();

//Transfer Object for inter-tier data transfer

EmployeeTO tempEmpTO = null;

try{

//DBUtil - helper classes that retrieve connection from pool

conn = DBUtil.getConn09电竞平台ection();

pstmt = conn.prepareStatement(FIND_BY_SAL_RNG);

pstmt.setDouble(1, Double.valueOf( (String)

salaryMap.get("MIN_SALARY") );

pstmt.setDouble(2, Double.valueOf( (String)

salaryMap.get("MIN_SALARY") );

rs = pstmt.executeQuery();

int tmpEmpNo = 0;

String tmpEmpName = "";

double tmpSalary = 0.0D;

while (rs.next()){

tmpEmpNo = rs.getInt("EMP_NO");

tmpEmpName = rs.getString("EMP_NAME");

tmpSalary = rs.getDouble("SALARY");

t09电竞平台empEmpTO = new EmployeeTO(tmpEmpNo,

tmpEmpName,

tmpSalary);

empList.add(tempEmpTO);

}//end while

}//end try

catch (SQLException sqle){

throw new DBException(sqle);

}//end catch

finally{

try{

if (rs != null){

rs.close();

}

}

catch (SQLException sqle){

throw new DBException(sqle);

}

try{

if (pstmt != null){

pstmt.close();

}

}

catch (SQLException sqle){

throw new DBException(sqle);

}

try{

if (conn != null){

conn.close();

}

}

catch (SQLException sqle){

throw new DBException(sqle);

}

}//end of finally block

return empList;

}//end method findBySalaryRange

}



上一篇:雷竞技下载官方版:一棵小草的坚守新闻频道中国青年网
下一篇:电竞下载app送彩金:《环球时报》社评:向李文亮医生致以敬意