DAo设计模式1Word文件下载.docx
《DAo设计模式1Word文件下载.docx》由会员分享,可在线阅读,更多相关《DAo设计模式1Word文件下载.docx(17页珍藏版)》请在冰豆网上搜索。
xxx.factory.DAOFactory
DAO开发
DAO的开发完全围绕数据库进行,使用如下表
数据库创建脚本:
/*=======================删除数据库=======================*/
DROPDATABASEIFEXISTShbmu;
/*=======================创建数据库=======================*/
CREATEDATABASEhbmu;
/*=======================使用数据库=======================*/
USEhbmu;
/*=======================删除数据表=======================*/
DROPTABLEIFEXISTSemp;
/*=======================创建数据表=======================*/
CREATETABLEemp(
empnoINT(4)PRIMARYKEY,
enameVARCHAR(10),
jobVARCHAR(9),
hiredateDATE,
salFLOAT(7,2)
);
首先定义VO类,VO类的名称与表的名称一致,但是要注意类的命名规范---单词的开头首字母大写:
定义对应的VO类----Emp.java
packagecn.edu.hbmu.vo;
importjava.util.Date;
publicclassEmp{
privateintempno;
privateStringename;
privateStringjob;
privateDatehiredate;
privatefloatsal;
publicintgetEmpno(){
returnempno;
}
publicvoidsetEmpno(intempno){
this.empno=empno;
publicStringgetEname(){
returnename;
publicvoidsetEname(Stringename){
this.ename=ename;
publicStringgetJob(){
returnjob;
publicvoidsetJob(Stringjob){
this.job=job;
publicDategetHiredate(){
returnhiredate;
publicvoidsetHiredate(Datehiredate){
this.hiredate=hiredate;
publicfloatgetSal(){
returnsal;
publicvoidsetSal(floatsal){
this.sal=sal;
}
}
简单的VO类,定义了属性、getter、setter方法。
日期使用的是java.util.Date;
定义
数据库连接类------DatabaseConnection.java
packagecn.edu.hbmu.dbc;
importjava.sql.Connection;
importjava.sql.DriverManager;
importjava.sql.SQLException;
publicclassDatabaseConnection{
privatestaticfinalStringDBDRIVER="
org.gjt.mm.mysql.Driver"
;
privatestaticfinalStringDBURL="
jdbc:
mysql:
//localhost:
3306/hbmu"
privatestaticfinalStringDBUSER="
root"
privatestaticfinalStringDBPASSWORD="
123"
privateConnectionconn;
publicDatabaseConnection()throwsException{
Class.forName(DBDRIVER);
this.conn=DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD);
publicConnectiongetConnection(){
returnthis.conn;
publicvoidclose()throwsException{
if(this.conn!
=null){
try{
this.conn.close();
}catch(Exceptione){
throwe;
}
在执行数据库连接和关闭中,由于可能出现意外情况而导致无法操作成功时,所有的异常将统一交给调用处处理。
如果要适用不同的数据库,可以将可能变化的地方听过接口实现,然后根据不同的数据库定义不同的子类,通过工厂类完成调用
DAO接口DAO接口:
packagecn.edu.hbmu.dao;
importjava.util.List;
importcn.edu.hbmu.vo.Emp;
publicinterfaceIEmpDAO{
/**
*数据的增加操作,一般以doXxx的方式命名
*@paramemp要增加的数据对象
*@return是否增加成功的标记
*@throwsException有异常交给被调用处处理
*/
publicbooleandoCreate(Empemp)throwsException;
*查询全部的数据(多条记录),一般以findXxx的方式命名或getXxx
*@paramkeyWord查询关键字
*@return返回全部的查询结果,每一个Emp对象表示表的一行记录
publicList<
Emp>
findAll(StringkeyWord)throwsException;
*根据雇员编号查询雇员信息
*@paramempno雇员编号
*@return雇员的VO对象
publicEmpfindById(intempno)throwsException;
DAO接口定义完成后需要具体的实现类,有两种:
1.真实实现类
2.代理实现类
DAO接口真实实现类:
真实实现类主要负责具体的数据库操作,在操作时为了性能和安全使用PreparedStatement接口完成。
packagecn.hbmu.edu.dao.impl;
importjava.sql.PreparedStatement;
importjava.sql.ResultSet;
importjava.util.ArrayList;
importcn.edu.hbmu.dao.IEmpDAO;
publicclassEmpDAOImplimplementsIEmpDAO{
privateConnectionconn=null;
//数据库连接对象
privatePreparedStatementpstmt=null;
//数据库操作对象
publicEmpDAOImpl(Connectionconn){//构造方法接收外部传递来的数据库连接的实例化对象
this.conn=conn;
//取得数据库连接
publicbooleandoCreate(Empemp)throwsException{
booleanflag=false;
//定义标志位
Stringsql="
insertintoemp(empno,ename,job,hiredate,sal)values(?
?
)"
;
this.pstmt=this.conn.prepareStatement(sql);
//实例化预处理对象
this.pstmt.setInt(1,emp.getEmpno());
//设置empno
this.pstmt.setString(2,emp.getEname());
this.pstmt.setString(3,emp.getJob());
this.pstmt.setDate(4,newjava.sql.Date(emp.getHiredate().getTime()));
//设置hiredate对象,PreparedStatement对象的setDate方法是用的是SQLDATEvalue,需要转换java.util.Date.getTime()
this.pstmt.setFloat(5,emp.getSal());
if(this.pstmt.executeUpdate()>
0){//更新记录的行数大于0
flag=true;
//修改标志位
}
this.pstmt.close();
//关闭PreparedStatement对象
returnflag;
findAll(StringkeyWord)throwsException{
List<
all=newArrayList<
();
//定义集合,接收全部数据
selectempno,ename,job,hiredate,salfromempwhereenamelike?
orjoblike?