DAO设计模式2Word文件下载.docx

上传人:b****1 文档编号:5233259 上传时间:2023-05-04 格式:DOCX 页数:28 大小:104.18KB
下载 相关 举报
DAO设计模式2Word文件下载.docx_第1页
第1页 / 共28页
DAO设计模式2Word文件下载.docx_第2页
第2页 / 共28页
DAO设计模式2Word文件下载.docx_第3页
第3页 / 共28页
DAO设计模式2Word文件下载.docx_第4页
第4页 / 共28页
DAO设计模式2Word文件下载.docx_第5页
第5页 / 共28页
DAO设计模式2Word文件下载.docx_第6页
第6页 / 共28页
DAO设计模式2Word文件下载.docx_第7页
第7页 / 共28页
DAO设计模式2Word文件下载.docx_第8页
第8页 / 共28页
DAO设计模式2Word文件下载.docx_第9页
第9页 / 共28页
DAO设计模式2Word文件下载.docx_第10页
第10页 / 共28页
DAO设计模式2Word文件下载.docx_第11页
第11页 / 共28页
DAO设计模式2Word文件下载.docx_第12页
第12页 / 共28页
DAO设计模式2Word文件下载.docx_第13页
第13页 / 共28页
DAO设计模式2Word文件下载.docx_第14页
第14页 / 共28页
DAO设计模式2Word文件下载.docx_第15页
第15页 / 共28页
DAO设计模式2Word文件下载.docx_第16页
第16页 / 共28页
DAO设计模式2Word文件下载.docx_第17页
第17页 / 共28页
DAO设计模式2Word文件下载.docx_第18页
第18页 / 共28页
DAO设计模式2Word文件下载.docx_第19页
第19页 / 共28页
DAO设计模式2Word文件下载.docx_第20页
第20页 / 共28页
亲,该文档总共28页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

DAO设计模式2Word文件下载.docx

《DAO设计模式2Word文件下载.docx》由会员分享,可在线阅读,更多相关《DAO设计模式2Word文件下载.docx(28页珍藏版)》请在冰点文库上搜索。

DAO设计模式2Word文件下载.docx

pstmt.setInt(1,vo.getEmpno());

pstmt.setString(2,vo.getEname());

pstmt.setString(3,vo.getJob());

pstmt.setDate(4, 

java.sql.Date(vo.getHiredate().getTime()));

pstmt.setDouble(5,vo.getSal());

pstmt.setDouble(6,vo.getComm());

if 

(pstmt.executeUpdate()>

0){

return 

true 

}

dbc.close();

false;

如果真的按照这种方式实现的程序,有两个重要问题:

对于数据层之中给出的若干方法,由服务层调用,一个服务层要执行N个数据层,那么每次执行的时候打开一次关闭一次数据库?

按照异常的处理机制,如果现在执行的过程之中出现了错误,那么顺着throws就结束调用了,数据库就再也无法关闭了。

按照之前的分析,一个业务要进行多个数据层操作,所以数据库连接与关闭交给业务层做最合适,而数据层只需要有一个Connection对象就可以操作了,它不需要关心这个对象是从那里来的,怎么来的,只关心能不能使用。

package 

cn.mldn.oracle.dao.impl;

import 

java.sql.Connection;

java.sql.PreparedStatement;

java.sql.ResultSet;

java.util.ArrayList;

java.util.List;

cn.mldn.oracle.dao.IEmpDAO;

cn.mldn.oracle.vo.Emp;

class 

EmpDAOImpl 

implements 

IEmpDAO{

private 

Connection 

conn;

PreparedStatement 

pstmt;

EmpDAOImpl(Connectionconn){

this.conn 

=conn;

this.pstmt 

this.conn.prepareStatement(sql);

this.pstmt.setInt(1,vo.getEmpno());

this.pstmt.setString(2,vo.getEname());

this.pstmt.setString(3,vo.getJob());

this.pstmt.setDate(4, 

this.pstmt.setDouble(5,vo.getSal());

this.pstmt.setDouble(6,vo.getComm());

(this.pstmt.executeUpdate()>

true;

doUpdate(Empvo) 

UPDATEempSETename=?

job=?

hiredate=?

sal=?

comm=?

WHEREempno=?

this.pstmt.setString(1,vo.getEname());

this.pstmt.setString(2,vo.getJob());

this.pstmt.setDate(3, 

this.pstmt.setDouble(4,vo.getSal());

this.pstmt.setDouble(5,vo.getComm());

this.pstmt.setInt(6,vo.getEmpno());

doRemove(int 

id) 

DELETEFROMempWHEREempno=?

this.pstmt.setInt(1,id);

EmpfindById(int 

Empemp= 

null;

SELECTempno,ename,job,hiredate,sal,commFROMempWHEREempno=?

ResultSetrs= 

this.pstmt.executeQuery();

(rs.next()){

emp= 

Emp();

emp.setEmpno(rs.getInt

(1));

emp.setEname(rs.getString

(2));

emp.setJob(rs.getString(3));

emp.setHiredate(rs.getDate(4));

emp.setSal(rs.getDouble(5));

emp.setComm(rs.getDouble(6));

emp;

List<

Emp>

findAll() 

all= 

ArrayList<

();

SELECTempno,ename,job,hiredate,sal,commFROMemp"

while 

all.add(emp);

all;

findAll(Stringcolumn,StringkeyWord, 

int 

currentPage,

lineSize) 

SELECT*FROM("

SELECTempno,ename,job,hiredate,sal,comm,ROWNUMrnFROMempWHERE"

+column+ 

LIKE?

ANDROWNUM<

=?

)temp"

WHEREtemp.rn>

?

"

this.pstmt.setString(1, 

%"

+keyWord+ 

);

this.pstmt.setInt(2,currentPage*lineSize);

this.pstmt.setInt(3,(currentPage-1)*lineSize);

getAllCount(Stringcolumn,StringkeyWord) 

SELECTCOUNT(empno)FROMempWHERE"

this.conn.prepareStatement(sql);

this.pstmt.executeQuery();

rs.getInt

(1);

0;

3.4.3 

、定义DAO工厂类

由于不同层之间只能依靠接口取得对象,所以就一定需要定义工厂操作类,工厂类定义在cn.mldn.oracle.factory包之中,名称为DAOFactory。

定义工厂类

cn.mldn.oracle.factory;

cn.mldn.oracle.dao.impl.EmpDAOImpl;

DAOFactory{

static 

IEmpDAOgetIEmpDAOInstance(Connectionconn){

EmpDAOImpl(conn);

3.5、开发业务层(重点)

3.5.1 

、开发业务层标准

业务层以后也是需要留给其他层进行调用的,所以业务层定义的时候也需要首先定义出操作标准,而这个标准也依然使用接口完成,对于业务层,接口命名要求:

表名称 

+Service,例如:

IEmpService,表示操作Emp表的业务。

在cn.mldn.oracle.service包中定义IEmpService接口

cn.mldn.oracle.service;

java.util.Map;

interface 

IEmpService{

/**

调用数据库的增加操作,操作流程如下:

<

br>

li>

首先要使用IEmpDAO接口中的findById()方法,根据要增加的id查看指定的雇员信息是否存在;

如果要增加的雇员信息不存在,则执行IEmpDAO接口的doCreate()方法,并将结果返回;

@param 

vo 

包装数据的对象

@return 

如果增加成功,返回true,如果雇员编号存在或者是增加失败,返回false

@throws 

Exception 

有异常交给被调用处处理

*/

insert(Empvo) 

Exception;

执行数据的更新操作,操作的时候直接调用IEmpDAO接口的doUpdate()方法,并将更新结果返回

如果修改成功,返回true,如果数据不存在或修改失败,返回false

update(Empvo) 

Exception;

执行数据的删除操作,删除操作的时候调用IEmpDAO接口的doRemove()方法

id 

要删除雇员的id

如果删除成功,返回true,如果数据不存在或删除失败,则返回false

delete(int 

根据雇员的编号取得全部的信息

雇员编号

如果雇员存在则将数据包装为Emp对象返回,如果数据不存在则返回null

Empget(int 

查询全部或者是模糊查询全部数据,查询的同时可以返回满足此查询的数据量,在调用的时候需要执行以下操作:

查询全部的雇员信息:

需要IEmpDAO接口的findAll()方法;

查询满足条件的雇员数量:

使用IEmpDAO接口的getAllCount()方法操作;

column 

模糊查询的字段

keyWord 

模糊查询的关键字

currentPage 

当前所在页

lineSize 

每页显示的数据长度

由于在进行数据返回的时候,此方法要返回两类数据:

、int,使用Map返回:

返回值1:

key=allEmps,value=findAll();

返回值2:

key=empCount,value=getAllCount();

Map<

String,Object>

list(Stringcolumn,StringkeyWord,

currentPage, 

3.5.2 

、定义业务层标准的实现类

如果现在要想实现业务层的标准,必须有一个原则先把握住:

一个业务层的方法操作要调用多个数据层,同时每个业务要处理数据库的打开和关闭。

定义标准实现类 

—— 

cn.mldn.oracle.service.impl.EmpServiceImpl

cn.mldn.oracle.service.impl;

java.util.HashMap;

cn.mldn.oracle.dbc.DatabaseConnection;

cn.mldn.oracle.factory.DAOFactory;

cn.mldn.oracle.service.IEmpService;

EmpServiceImpl 

DatabaseConnection 

dbc 

DatabaseConnection();

try 

{

Connectionconn= 

this.dbc.getConnection();

// 

取得连接

IEmpDAOdao=DAOFactory.getIEmpDAOInstance(conn);

取得DAO接口对象

(dao.findById(vo.getEmpno())== 

null){ 

没有要查询的雇员信息

dao.doCreate(vo);

返回DAO的结果

数据存在,直接返回false

catch 

(Exceptione){

throw 

e;

finally 

this.dbc.close();

DAOFactory.getIEmpDAOInstance(this.dbc.getConnection())

.doUpdate(vo);

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 法律文书 > 调解书

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2