李兴华JavaDao设计模式Word格式文档下载.docx

上传人:b****6 文档编号:19161702 上传时间:2023-01-04 格式:DOCX 页数:29 大小:328.16KB
下载 相关 举报
李兴华JavaDao设计模式Word格式文档下载.docx_第1页
第1页 / 共29页
李兴华JavaDao设计模式Word格式文档下载.docx_第2页
第2页 / 共29页
李兴华JavaDao设计模式Word格式文档下载.docx_第3页
第3页 / 共29页
李兴华JavaDao设计模式Word格式文档下载.docx_第4页
第4页 / 共29页
李兴华JavaDao设计模式Word格式文档下载.docx_第5页
第5页 / 共29页
点击查看更多>>
下载资源
资源描述

李兴华JavaDao设计模式Word格式文档下载.docx

《李兴华JavaDao设计模式Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《李兴华JavaDao设计模式Word格式文档下载.docx(29页珍藏版)》请在冰豆网上搜索。

李兴华JavaDao设计模式Word格式文档下载.docx

|-〖数据层〗直接修改雇员数据;

【业务层】实现雇员的删除操作;

|-〖数据层〗直接删除雇员数据;

【业务层】可以根据雇员编号查询出雇员的完整信息;

|-〖数据层〗直接根据编号做限定查询;

【业务层】可以显示全部雇员记录;

|-〖数据层〗查询雇员表的全部数据

【业务层】可以分页显示全部雇员记录,或者可以使用模糊查询进行关键字匹配,在返回全部记录的同时还需要返回本次查询的总数据量;

|-〖数据层〗使用LIKE模糊查询查询满足条件的数据信息;

|-〖数据层〗使用COUNT()函数统计满足条件的数据量。

通过以上的分析就可以清楚的发现,一个业务层还是调用了多个数据层,所以在日后用户所提出的全部要求的细分,基本上都是业务层分析,而只有确定了业务之后才可以确定出数据层。

4.3、代码的准备

首先需要打开Oracle的系统服务,而后建立一个新的项目——DAOProject,同时在项目之中配置好所需要的数据库驱动程序。

系统的开发之中需要有包的规范,现在假设父包名称为:

cn.mldn.oracle。

4.3.1、数据库连接类:

DatabaseConnection

在整个JDBC操作过程之中,数据库只有打开后才可以进行一系列的操作,而后数据库的连接又必须关闭。

那么为了方便控制,可以直接将数据库的打开和关闭操作封装在一个类之中。

数据库的连接类保存包为“cn.mldn.oracle.dbc”,而且此数据库的连接只针对于Oracle定义。

范例:

定义DatabaseConnection.java类

packagecn.mldn.oracle.dbc;

importjava.sql.Connection;

importjava.sql.DriverManager;

importjava.sql.SQLException;

publicclassDatabaseConnection{

privatestaticfinalStringDBDRIVER="

oracle.jdbc.driver.OracleDriver"

;

privatestaticfinalStringDBURL="

jdbc:

oracle:

thin:

@localhost:

1521:

MLDN"

privatestaticfinalStringDBUSER="

scott"

privatestaticfinalStringPASSWORD="

tiger"

privateConnectionconn;

//准备出一个数据库连接对象

publicDatabaseConnection(){

try{

Class.forName(DBDRIVER);

this.conn=DriverManager.getConnection(DBURL,DBUSER,PASSWORD);

}catch(Exceptione){

e.printStackTrace();

}

publicConnectiongetConnection(){

returnthis.conn;

publicvoidclose(){

if(this.conn!

=null){

this.conn.close();

}catch(SQLExceptione){

}

严格来讲以上的写法只是一个简便写法,因为日后是为了向框架开发靠拢,所有一些地方就需要做一些修改,而最早的时候,对于DAO设计模式的主要功能是为了解决掉数据库的可移植操作问题。

4.3.2、开发简单Java类

简单Java类指的就是类的结构比较单一,主要是由属性、setter/getter方法所组成,简单Java类的主要功能是作为一种数据的载体进行存放,而日后对于简单Java类也会出现如下的名称:

POJO(简单Java类)、VO(值对象)、TO(DTO,数据传输对象,主要用于分布式)、PO(持久化对象)。

可是对于简单Java类的组成结构在开发之中也有了明确要求:

简单Java类的最主要的设计思想来源于数据表,所以一定要和数据表的结构映射上;

简单Java类的名称要与数据表的名称保持一致,注意大小写,例如:

member_info表,类:

MemberInfo;

为了方便程序扩展,所有的简单Java类必须实现java.io.Serializable接口;

类之中的属性必须使用private封装,封装后的属性一定要编写setter、getter方法;

类之中一定要提供有无参构造方法;

类之中不允许使用基本数据类型,所有的基本类型要全部替换为包装类;

类之中不允许出现任何的输出语句,所有的输出必须交给被调用处执行;

类可以有选择性的覆写Object类的:

equals()、hashCode()、toString()。

简单Java类要求保存在cn.mldn.oracle.vo包中。

定义Member.java类

packagecn.mldn.oracle.vo;

importjava.io.Serializable;

importjava.util.Date;

@SuppressWarnings("

serial"

publicclassEmpimplementsSerializable{

privateIntegerempno;

privateStringename;

privateStringjob;

privateDatehiredate;

privateDoublesal;

privateDoublecomm;

//setter、getter略

此时类之中默认提供有一个无参构造方法,所以此时的类完全符合于简单Java类的开发标准。

4.4、开发数据层:

DAO层

数据层又分称为持久层,指的是进行持久化数据操作的。

持久层属于DAO层,所以在进行开发的时候首先要开发出操作的标准,而后进行子类的实现。

4.4.1、持久层标准

因为持久层最终要交给业务层进行调用,所以持久层必须有一个自己的操作接口,用于定义标准,但是此接口的命名是有要求的,如果当前操作的是emp表,那么这个接口应该命名为EmpDAO,但是为了区分接口还有类,所以现在要求在接口定义前增加一个字母I,所以emp表的持久层标准名称:

IEmpDAO,而且此接口要保存在cn.mldn.oracle.dao下。

在数据层之中定义的方法严格来讲就只有两类:

数据更新操作:

此类方法的命名以“doXxx()”的形式,例如:

doCreate()、doUpdate()、doRemove();

数据查询操作:

查询会分为两个小类:

|-数据查询:

此类方法以“findXxx()”命名,例如:

findById()、findByJob()、findAll();

|-统计查询:

此类方法以“getXxx()”命名,例如:

getAllCount()。

定义IEmpDAO接口

packagecn.mldn.oracle.dao;

importjava.util.List;

importcn.mldn.oracle.vo.Emp;

publicinterfaceIEmpDAO{

publicbooleandoCreate(Empvo)throwsException;

publicbooleandoUpdate(Empvo)throwsException;

publicbooleandoRemove(Integerid)throwsException;

publicEmpfindById(Integerid)throwsException;

publicListfindAll()throwsException;

publicListfindAll(Stringcolumn,StringkeyWord,

IntegercurrentPage,IntegerlineSize)throwsException;

publicIntegergetAllCount(Stringcolumn,StringkeyWord)throwsException;

以后的工作之中一定要按照以上的要求编写注释信息,这才叫合格代码。

4.4.2、定义数据层实现类:

EmpDAOImpl

接口标准定义完成之后,下面就可以进行实现类的编写,编写的实现类要保存在cn.mldn.oracle.dao.impl子包之中,而且名称后面一定要加上Impl。

但是对于实现类,现在采用如下的方式编写。

观察问题

@Override

publicbooleandoCreate(Empvo)throwsException{

Stringsql="

INSERTINTOemp(empno,ename,job,hiredate,sal,comm)VALUES(?

?

)"

DatabaseConnectiondbc=newDatabaseConnection();

Connectionconn=dbc.getConnection();

PreparedStatementpstmt=conn.prepareStatement(sql);

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

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

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

pstmt.setDate(4,newjava.sql.Date(vo.getHiredate().getTime()));

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

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

if(pstmt.executeUpdate()>

0){

returntrue;

dbc.close();

returnfalse;

如果此时的实现类按照如下的方式编写,可能存在有两个重要问题:

根据异常的处理来讲,如果在处理过程之中出现了数据库的更新异常,那么就再也关不上了,而且在本程序之中,如果更新成功直接返回了,也无法关闭;

一个业务层会调用多个数据层操作,现在把数据库的打开和关闭操作放在了数据层的每一个方法里面,这就意味着,一个业务操作的时候会打开和关闭数据库多次,那么可以将数据库的连接和关闭操作交给业务层处理;

标准实现

packagecn.mldn.oracle.dao.impl;

importjava.sql.PreparedStatement;

importjava.sql.ResultSet;

importjava.util.ArrayList;

importcn.mldn.oracle.dao.IEmpDAO;

publicclassEmpDAOImplimplementsIEmpDAO{

privateConnectionconn;

privatePreparedStatementpstmt;

publicEmpDAOImpl(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,newjava.sql.Date(vo.getHiredate().getTime()));

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

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

 

if(this.pstmt.executeUpdate()>

returntrue;

publicbooleandoUpdate(Empvo)throwsException{

UPDATEempSETename=?

job=?

hiredate=?

sal=?

comm=?

WHEREempno=?

"

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

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

this.pstmt.setDate(3,newjava.sql.Date(vo.getHiredate().getTime()));

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

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

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

publicbooleandoRemove(Integerid)throwsException{

DELETEFROMempWHEREempno=?

this.pstmt.setInt(1,id);

publicEmpfindById(Integerid)throwsException{

Empvo=null;

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

ResultSetrs=this.pstmt.executeQuery();

if(rs.next()){//有数据返回

vo=newEmp();

vo.setEmpno(rs.getInt

(1));

vo.setEname(rs.getString

(2));

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

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

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

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

returnvo;

publicListfindAll()throwsException{

Listall=newArrayList();

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

while(rs.next()){

Empvo=newEmp();

all.add(

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

当前位置:首页 > 高等教育 > 文学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1