




已阅读5页,还剩8页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
.DAO设计模式DAO设计模式简介DAO(Data Access Object 数据访问对象)主要功能是数据操作,在程序开发架构中属于数据层的操作,程序的标准开发架构如下:在整个DAO中实际上是以接口为操作标准,即客户端依靠DAO实现的接口进行操作,而服务器端要将接口进行具体的实现。由以下几个部分组成:包的命名: 数据库连接:xxx.dbc.DatabaseConection DAO接口:xxx.dao.IXxxDAO DAO接口真实实现类:xxx.dao.impl.XxxDAOImpl DAO接口代理实现类:xy.XxxDAOProxy VO类:xxx.vo.Xxx , VO的命名要与表的命名一致 工厂类:xxx.factory.DAOFactoryDAO开发DAO的开发完全围绕数据库进行,使用如下表数据库创建脚本:/*= 删除数据库 =*/DROP DATABASE IF EXISTS hbmu ;/*= 创建数据库 =*/CREATE DATABASE hbmu ;/*= 使用数据库 =*/USE hbmu ;/*= 删除数据表 =*/DROP TABLE IF EXISTS emp ;/*= 创建数据表 =*/CREATE TABLE emp( empnoINT(4)PRIMARY KEY, enameVARCHAR(10), jobVARCHAR(9), hiredateDATE, salFLOAT(7,2) ;首先定义VO类,VO类的名称与表的名称一致,但是要注意类的命名规范-单词的开头首字母大写:定义对应的VO类-Emp.javapackage .hbmu.vo;import java.util.Date;public class Emp private int empno;private String ename;private String job;private Date hiredate;private float sal ;public int getEmpno() return empno;public void setEmpno(int empno) this.empno = empno;public String getEname() return ename;public void setEname(String ename) this.ename = ename;public String getJob() return job;public void setJob(String job) this.job = job;public Date getHiredate() return hiredate;public void setHiredate(Date hiredate) this.hiredate = hiredate;public float getSal() return sal;public void setSal(float sal) this.sal = sal;简单的VO类,定义了属性、getter、setter方法。日期使用的是java.util.Date;定义数据库连接类- DatabaseConnection.javapackage .hbmu.dbc;import java.sql.Connection;import java.sql.DriverManager;import java.sql.SQLException;public class DatabaseConnection private static final String DBDRIVER = org.gjt.mm.mysql.Driver ; private static final String DBURL = jdbc:mysql:/localhost:3306/hbmu ;private static final String DBUSER = root ;private static final String DBPASSWORD = 123 ;private Connection conn;public DatabaseConnection() throws Exception Class.forName(DBDRIVER);this.conn=DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD);public Connection getConnection()return this.conn;public void close() throws Exceptionif(this.conn!=null)try this.conn.close(); catch (Exception e) throw e;在执行数据库连接和关闭中,由于可能出现意外情况而导致无法操作成功时,所有的异常将统一交给调用处处理。如果要适用不同的数据库,可以将可能变化的地方听过接口实现,然后根据不同的数据库定义不同的子类,通过工厂类完成调用DAO接口DAO接口:xxx.dao.IXxxDAOpackage .hbmu.dao;import java.util.List;import .hbmu.vo.Emp;public interface IEmpDAO /* * 数据的增加操作,一般以doXxx的方式命名 * param emp 要增加的数据对象 * return 是否增加成功的标记 * throws Exception 有异常交给被调用处处理 */public boolean doCreate(Emp emp) throws Exception; /* * 查询全部的数据(多条记录),一般以findXxx的方式命名或getXxx * param keyWord 查询关键字 * return 返回全部的查询结果,每一个Emp对象表示表的一行记录 * throws Exception 有异常交给被调用处处理 */public List findAll(String keyWord) throws Exception;/* * 根据雇员编号查询雇员信息 * param empno 雇员编号 * return 雇员的VO对象 * throws Exception 有异常交给被调用处处理 */public Emp findById(int empno) throws Exception;DAO接口定义完成后需要具体的实现类,有两种:1. 真实实现类2. 代理实现类DAO接口真实实现类:xxx.dao.impl.XxxDAOImpl真实实现类主要负责具体的数据库操作,在操作时为了性能和安全使用PreparedStatement接口完成。package .dao.impl;import java.sql.Connection;import java.sql.PreparedStatement;import java.sql.ResultSet;import java.util.ArrayList;import java.util.List;import .hbmu.dao.IEmpDAO;import .hbmu.vo.Emp;public class EmpDAOImpl implements IEmpDAO private Connection conn = null;/数据库连接对象private PreparedStatement pstmt = null;/数据库操作对象public EmpDAOImpl(Connection conn) /构造方法接收外部传递来的数据库连接的实例化对象this.conn = conn;/取得数据库连接public boolean doCreate(Emp emp) throws Exception boolean flag = false;/定义标志位String sql = insert into emp(empno,ename,job,hiredate,sal) values(?,?,?,?,?);this.pstmt = this.conn.prepareStatement(sql);/实例化预处理对象this.pstmt.setInt(1, emp.getEmpno();/设置empnothis.pstmt.setString(2, emp.getEname();this.pstmt.setString(3, emp.getJob();this.pstmt.setDate(4, new java.sql.Date(emp.getHiredate().getTime();/设置hiredate对象,PreparedStatement对象的setDate方法是用的是SQL DATE value ,需要转换java.util.Date.getTime()this.pstmt.setFloat(5, emp.getSal();if (this.pstmt.executeUpdate() 0) /更新记录的行数大于0flag = true;/修改标志位this.pstmt.close();/关闭PreparedStatement对象return flag;public List findAll(String keyWord) throws Exception List all = new ArrayList();/定义集合,接收全部数据String sql = select empno,ename,job,hiredate,sal from emp where ename like ? or job like ?;this.pstmt = this.conn.prepareStatement(sql);/实例化预处理对象this.pstmt.setString(1, % + keyWord + %);/设置查询的关键字this.pstmt.setString(2, % + keyWord + %);/ResultSet rs = this.pstmt.executeQuery();/执行查询操作while (rs.next() /依次取出每一条数据Emp emp = new 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.getFloat(5);all.add(emp);/向集合添加对象this.pstmt.close();return all;public Emp findById(int empno) throws Exception Emp emp = null;String sql = SELECT empno,ename,job,hiredate,sal FROM emp WHERE empno=?;this.pstmt = this.conn.prepareStatement(sql);this.pstmt.setInt(1, empno);ResultSet rs = this.pstmt.executeQuery();if (rs.next() emp = new Emp();emp.setEmpno(rs.getInt(1);emp.setEname(rs.getString(2);emp.setJob(rs.getString(3);emp.setHiredate(rs.getDate(4);emp.setSal(rs.getFloat(5);this.pstmt.close();return emp;在真实的实现类中,根本没有处理数据库的打开和连接操作,只是通过构造方法取得了数据库的连接,而真正负责打开和关闭数据库的操作由代理类完成。DAO接口代理实现类:xy.XxxDAOProxypackage xy;import java.sql.ResultSet;import java.util.ArrayList;import java.util.List;import .hbmu.dao.IEmpDAO;import .hbmu.dbc.DatabaseConnection;import .hbmu.vo.Emp;import .dao.impl.EmpDAOImpl;public class EmpDAOProxy implements IEmpDAO private DatabaseConnection dbc=null;/定义数据库的连接类private IEmpDAO dao=null; /声明DAO对象public EmpDAOProxy() throws Exception/在构造方法中实例化连接,同时实例化DAO对象this.dbc=new DatabaseConnection();/连接数据库this.dao=new EmpDAOImpl(this.dbc.getConnection();/实例化真实主题类public boolean doCreate(Emp emp) throws Exception boolean flag = false;try if (this.dao.findById(emp.getEmpno() = null) /如果要插入的雇员编号不存在flag = this.dao.doCreate(emp);/调用真实主题操作 catch (Exception e) /有异常交给被调用处throw e;finallythis.dbc.close(); /关闭数据库return flag;public List findAll(String keyWord) throws ExceptionList all = null ;tryall = this.dao.findAll(keyWord) ;catch(Exception e)throw e ;finallythis.dbc.close() ;return all ;public Emp findById(int empno) throws ExceptionEmp emp = null ;tryemp = this.dao.findById(empno) ;catch(Exception e)throw e ;finallythis.dbc.close() ;return emp ;在代理类的构造方法中实例化了数据库连接类的对象以及真实实现类,而在代理中的各个方法只是调用了真实主题实现类中的相应方法。异常处理格式:tryXXXXXXXXXXXXXXXXXXXXXXXXXXXcatch(Exception e)throw e ;finallythis.dbc.close() ;工厂类:xxx.factory.DAOFactorypackage .hbmu.factory;import .hbmu.dao.IEmpDAO;import xy.EmpDAOProxy;public class DAOFactory public static IEmpDAO getIEmpDAOInstance() throws Exceptionreturn new EmpDAOProxy() ;本工厂类中的功能就是直接返回DAO接口的实例化对象,以后的客户端直接通过工厂类就可以取得DAO接口的实例化对象。测试DAO插入类- TestDAOInsertpackage .hbmu.dao.test;import .hbmu.factory.DAOFactory;import .hbmu.vo.Emp;public class TestDAOInsert public static void main(String args) throws Exception Emp emp = null ;for(int x=0;x5;x+)emp = new Emp() ;emp.setEmpno(1000 + x) ;emp.setEnam
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 低温天气混凝土施工方案
- 施工环境污染防治与控制方案
- 排水项目施工风险评估与管控方案
- 数控车工(中级)资格鉴定理论试题库及答案
- 建筑施工现场交通组织方案
- 施工材料使用量和成本控制方案
- 2025年褐煤开采洗选行业研究报告及未来行业发展趋势预测
- 2025年科普行业研究报告及未来行业发展趋势预测
- 2025年双肩包行业研究报告及未来行业发展趋势预测
- 2025年一次性手套行业研究报告及未来行业发展趋势预测
- 2025-2030中国重水市场运行态势与未来竞争力剖析报告
- 煤粉锅炉培训课件
- 2025年小学体育课程标准考试测试卷及参考答案
- 建筑业标准员培训
- CNC初级技术员考试试题及答案
- 水处理故障应急预案
- GB 17051-2025二次供水设施卫生规范
- 学校徒步活动方案
- 2025年普通高等学校招生全国统一考试数学试题(天津卷)含答案
- 生产部三级管理制度
- 2025-2030年中国挂耳咖啡行业发展趋势与投资战略研究报告
评论
0/150
提交评论