`
wenzongliang
  • 浏览: 466681 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

DAO

 
阅读更多

DAO(数据访问对象)数据层组织结构,大致包括以下对象。

IDAO
ImplDAO:具体数据的增删改查。
ProxyDAO:负责ImplDAO所用的数据库打开与关闭。
DatabaseConnection:数据库打开与关闭的执行者。
VO:属性与表中的字段相对应,一个vo类就是表中的一条记录。

Factory:生产IDAO下的代理的



 

一、信息系统的开发架构

 

客户层-------显示层-------业务层---------数据层---------数据库

1.客户层:客户层就是客户端,简单的来说就是浏览器。

2.显示层:JSP/Servlet,用于给浏览器显示。

3.业务层:对于数据层的原子操作进行整合

4.数据层:对于数据库进行的原子操作,增加、删除等;

 

二、DAO(Data Access Object)介绍

 

DAO应用在数据层那块,用于访问数据库,对数据库进行操作的类。

 

三、DAO设计模式的结构

 

DAO设计模式一般分为几个类:

1.VO(Value Object):一个用于存放网页的一行数据即一条记录的类,比如网页要显示一个用户的信息,则这个类就是用户的类。

2.DatabaseConnection:用于打开和关闭数据库。

3.DAO接口:用于声明对于数据库的操作。

4.DAOImpl:必须实现DAO接口,真实实现DAO接口的函数,但是不包括数据库的打开和关闭。

5.DAOProxy:也是实现DAO接口,但是只需要借助DAOImpl即可,但是包括数据库的打开和关闭。

6.DAOFactory:工厂类,含有getInstance()创建一个Proxy类。

 

四、DAO的好处

 

DAO的好处就是提供给用户的接口只有DAO的接口,所以如果用户想添加数据,只需要调用create函数即可,不需要数据库的操作。

 

五、DAO包命名

 

对于DAO,包的命名和类的命名一定要有层次。

 

六、实例解析

 

1.Emp.java

 

[java] view plaincopy
  1. package org.vo;  
  2. import java.util.*;  
  3. public class Emp{  
  4.     private int empno;  
  5.     private String ename;  
  6.     private String job;  
  7.     private Date hireDate;  
  8.     private float sal;  
  9.     public Emp(){  
  10.           
  11.     }  
  12.     public int getEmpno(){  
  13.         return empno;  
  14.     }  
  15.     public void setEmpno(int empno){  
  16.         this.empno = empno;  
  17.     }  
  18.     public String getEname(){  
  19.         return ename;  
  20.     }  
  21.     public void setEname(String ename){  
  22.         this.ename = ename;  
  23.     }  
  24.     public Date getHireDate(){  
  25.         return hireDate;  
  26.     }  
  27.     public void setHireDate(Date hireDate){  
  28.         this.hireDate = hireDate;  
  29.     }  
  30.     public float getSal(){  
  31.         return sal;  
  32.     }  
  33.     public void setSal(float sal){  
  34.         this.sal = sal;  
  35.     }  
  36.     public String getJob(){  
  37.         return job;  
  38.     }  
  39.     public void setJob(String job){  
  40.         this.job = job;  
  41.     }  
  42. }  

2.DatabaseConnection.java

 

 

[java] view plaincopy
  1. package org.dbc;  
  2. import java.sql.*;  
  3. public class DatabaseConnection{  
  4.     private Connection con = null;  
  5.     private static final String DRIVER = "com.mysql.jdbc.Driver";  
  6.     private static final String USER = "root";  
  7.     private static final String URL = "jdbc:mysql://localhost:3306/mldn";  
  8.     private static final String PASS = "12345";  
  9.     public DatabaseConnection()throws Exception{  
  10.         Class.forName(DRIVER);  
  11.         con = DriverManager.getConnection(URL,USER,PASS);  
  12.     }  
  13.     public Connection getConnection()throws Exception{  
  14.         return con;  
  15.     }  
  16.     public void close()throws Exception{  
  17.         if(con!=null){  
  18.             con.close();  
  19.         }  
  20.     }  
  21. }  

3.IEmpDAO.java

 

 

[java] view plaincopy
  1. package org.dao;  
  2. import java.util.List;  
  3. import org.vo.*;  
  4. public interface IEmpDAO{  
  5.     public boolean doCreate(Emp emp)throws Exception;  
  6.     public List<Emp> findAll()throws Exception;  
  7.     public Emp findById(int empno)throws Exception;  
  8. }  

4.EmpDAOImpl.java

 

 

[java] view plaincopy
  1. package org.dao.impl;  
  2. import org.dao.*;  
  3. import java.sql.*;  
  4. import org.vo.*;  
  5. import java.util.*;  
  6. public class EmpDAOImpl implements IEmpDAO{  
  7.     private Connection con;  
  8.     private PreparedStatement stat = null;  
  9.     public EmpDAOImpl(Connection con){  
  10.         this.con = con;  
  11.     }  
  12.     public boolean doCreate(Emp emp)throws Exception{  
  13.         String sql = "INSERT INTO emp(empno,ename,job,hiredate,sal) VALUES(?,?,?,?,?)";  
  14.         stat = con.prepareStatement(sql);  
  15.         stat.setInt(1,emp.getEmpno());  
  16.         stat.setString(2,emp.getEname());  
  17.         stat.setString(3,emp.getJob());  
  18.         stat.setDate(4,new java.sql.Date(emp.getHireDate().getTime()));  
  19.         stat.setFloat(5,emp.getSal());  
  20.         int update = stat.executeUpdate();  
  21.         if(update>0){  
  22.             return true;  
  23.         }  
  24.         else{  
  25.             return false;  
  26.         }  
  27.     }  
  28.     public List<Emp> findAll()throws Exception{  
  29.         String sql = "SELECT empno,ename,job,hiredate,sal FROM emp";  
  30.         stat = con.prepareStatement(sql);  
  31.         ResultSet rs = stat.executeQuery();  
  32.         Emp emp = null;  
  33.         List<Emp> list = new ArrayList<Emp>();  
  34.         while(rs.next()){  
  35.             int empno = rs.getInt(1);  
  36.             String ename = rs.getString(2);  
  37.             String job = rs.getString(3);  
  38.             float sal = rs.getFloat(5);  
  39.             emp = new Emp();  
  40.             emp.setEmpno(empno);  
  41.             emp.setEname(ename);  
  42.             emp.setJob(job);  
  43.             emp.setHireDate(rs.getDate(4));  
  44.             emp.setSal(sal);  
  45.             list.add(emp);  
  46.         }  
  47.         return list;  
  48.     }  
  49.     public Emp findById(int empno)throws Exception{  
  50.         String sql = "SELECT empno,ename,job,hiredate,sal FROM emp WHERE empno=?";  
  51.         stat = con.prepareStatement(sql);  
  52.         stat.setInt(1,empno);  
  53.         ResultSet rs = stat.executeQuery();  
  54.         Emp emp = null;  
  55.         if(rs.next()){  
  56.             String ename = rs.getString(2);  
  57.             String job = rs.getString(3);  
  58.             float sal = rs.getFloat(5);  
  59.             emp = new Emp();  
  60.             emp.setEmpno(empno);  
  61.             emp.setEname(ename);  
  62.             emp.setJob(job);  
  63.             emp.setHireDate(rs.getDate(4));  
  64.             emp.setSal(sal);  
  65.         }  
  66.         return emp;  
  67.     }  
  68. }  


5.EmpDAOProxy.java

 

 

[java] view plaincopy
  1. package org.dao.impl;  
  2. import org.dao.*;  
  3. import java.sql.*;  
  4. import org.vo.*;  
  5. import java.util.*;  
  6. import org.dbc.*;  
  7. public class EmpDAOProxy implements IEmpDAO{  
  8.     private DatabaseConnection dbc;  
  9.     private IEmpDAO dao = null;  
  10.     public EmpDAOProxy()throws Exception{  
  11.         dbc = new DatabaseConnection();  
  12.         dao = new EmpDAOImpl(dbc.getConnection());  
  13.     }  
  14.     public boolean doCreate(Emp emp)throws Exception{  
  15.         boolean flag = false;  
  16.         if(dao.findById(emp.getEmpno())==null){  
  17.             flag = dao.doCreate(emp);  
  18.         }  
  19.         dbc.close();  
  20.         return flag;  
  21.     }  
  22.     public List<Emp> findAll()throws Exception{  
  23.         List<Emp>list = dao.findAll();  
  24.         dbc.close();  
  25.         return list;  
  26.     }  
  27.     public Emp findById(int empno)throws Exception{  
  28.         Emp emp = dao.findById(empno);  
  29.         dbc.close();  
  30.         return emp;  
  31.     }  
  32. }  

6.DAOFactory.java

 

 

[java] view plaincopy
  1. package org.dao.factory;  
  2. import org.dao.*;  
  3. import java.sql.*;  
  4. import org.vo.*;  
  5. import java.util.*;  
  6. import org.dbc.*;  
  7. import org.dao.impl.*;  
  8. public class DAOFactory{  
  9.     public static IEmpDAO getInstance(){  
  10.         IEmpDAO dao = null;  
  11.         try{  
  12.             dao = new EmpDAOProxy();      
  13.         }  
  14.         catch(Exception e){  
  15.             e.printStackTrace();  
  16.         }  
  17.         return dao;  
  18.     }  
  19. }  


7.TestDAO.java

 

 

[java] view plaincopy
  1. package org.dao.test;  
  2. import org.dao.factory.*;  
  3. import org.vo.*;  
  4. import org.dao.*;  
  5. public class TestDAO{  
  6.     public static void main(String args[])throws Exception{  
  7.         Emp emp = null;  
  8.         for(int i=0;i<5;i++){  
  9.             emp = new Emp();  
  10.             emp.setEmpno(i);  
  11.             emp.setEname("xiazdong-"+i);  
  12.             emp.setJob("stu-"+i);  
  13.             emp.setHireDate(new java.util.Date());  
  14.             emp.setSal(500*i);  
  15.             DAOFactory.getInstance().doCreate(emp);  
  16.         }  
  17.     }  
  18. }  


通过DAO设计模式,可以在JSP中屏蔽了数据库连接的操作,达到JSP只负责显示的效果。

 

  • 大小: 6.4 KB
分享到:
评论

相关推荐

    泛型dao 泛型dao 泛型dao

    Struts2、Hibernate、Spring整合的泛型DAO (本人评价: 代码开发效率提高30% 代码出错率减少70%) 对于大多数开发人员,系统中的每个 DAO 编写几乎相同的代码到目前为止已经成为一种习惯。虽然所有人都将这种重复...

    dao3.5数据库+引擎.zip

    DAO(Data Access Objects)是微软在早期开发的一种数据访问接口,主要用于访问Microsoft Jet数据库引擎,如Access数据库。DAO 3.5是DAO的一个版本,它在Windows操作系统中广泛使用,尤其是在16位和32位应用程序中。...

    dao3.5数据库安装文件

    DAO(Data Access Objects)是微软在早期开发的一种用于访问数据库的应用程序编程接口(API),它在Visual Basic 6和早期的Microsoft Office版本中被广泛使用。DAO 3.5是该技术的一个特定版本,适用于32位操作系统。...

    Dao Jet数据库引擎

    DAO Jet数据库引擎是微软在早期开发的用于访问和管理Access数据库的一种组件,它与Jet数据库引擎密切相关。Jet引擎是Microsoft Windows操作系统中一个内置的数据库管理系统,主要用于支持Access数据库和其他使用Jet...

    Dao3.5数据库引擎

    DAO(Data Access Objects)是微软在早期开发的一种数据库访问技术,它是Microsoft Jet数据库引擎的一部分,主要用于与Access数据库的交互。DAO3.5是DAO的一个特定版本,它在Windows 95和Windows 98时代非常流行,但...

    系统配置文件 dao350和dao360

    标题中的“系统配置文件 dao350和dao360”指的是Microsoft Office系统中的数据库访问对象(DAO,Database Access Objects)版本350和360。DAO是Microsoft Jet数据库引擎的一部分,主要用于与Access数据库或其他Jet...

    dao jet数据库引擎

    DAO(Data Access Objects)是微软在早期开发的一种数据访问接口,主要用于访问Microsoft Jet数据库引擎,它是Access数据库的基础。Jet数据库引擎是微软开发的一种强大的、快速的数据库管理工具,尤其适用于小型到...

    VB6 DAO数据库操作实例

    VB6提供了多种与数据库交互的方式,其中之一就是Data Access Objects(DAO)。DAO是一种早期的数据库访问技术,它允许程序员直接与Jet数据库引擎(如Microsoft Access)进行交互。本篇文章将深入探讨VB6结合DAO进行...

    dao包封装包

    DAO(Data Access Object)封装包是软件开发中用于处理数据访问层的一种设计模式。它将数据库操作与业务逻辑分离,使得代码更易于维护和测试。在这个"dao封装包"中,我们通常会找到一系列与数据库交互的接口和实现类...

    dao 1.0 source code

    DAO(Data Access Object)模式是软件开发中常用的设计模式之一,主要用于数据库操作的抽象和封装。DAO 1.0 源代码的提供允许我们深入理解这一模式在实际项目中的应用。下面将详细介绍DAO模式的核心概念、作用以及...

    seasar框架S2Dao使用指南

    【S2Dao简介及特征】 S2Dao是Seasar2框架的一个重要组成部分,作为一个轻量级的持久化解决方案,它的主要特点是简化了Object-Relational Mapping(O/R映射)的过程,无需繁琐的XML配置。S2Dao的核心优势在于: 1. ...

    JSP的DAO模式留言板

    **JSP的DAO模式留言板详解** 在Web开发中,DAO(Data Access Object)模式是一种常见的设计模式,用于封装对数据库的操作,将业务逻辑与数据访问层分离,提高代码的可维护性和可测试性。本教程将详细介绍如何使用...

    C#特性标签实现通用Dao层

    在C#编程中,"通用Dao层"是一个常见的设计模式,用于封装数据库操作,使得业务逻辑层能够专注于处理业务规则,而无需关心底层数据访问的细节。本篇将重点探讨如何利用C#的特性(Attribute)标签来实现这一目标,同时...

    DAO详解 详细讲述了DAO的使用

    **DAO详解** DAO(Data Access Object)模式是软件设计中的一种模式,主要用于数据库访问层的抽象,它将数据操作逻辑封装在对象中,使得业务逻辑层与数据存储层解耦,提高了代码的可复用性和可维护性。本文将深入...

    用DAO实现的用户登录系统

    DAO(Data Access Object)模式是一种常见的软件设计模式,它用于封装对数据库的访问操作,将数据访问层与业务逻辑层分离,从而提高系统的可维护性和可扩展性。在这个"用DAO实现的用户登录系统"中,我们可以看到以下...

    .net 自动生成实体类、DAO工具

    在.NET开发环境中,自动生成实体类和DAO(Data Access Object)是提高开发效率的重要手段,尤其是在处理大量数据库交互时。这个".net 自动生成实体类、DAO工具"是一个实用的小型工具,能够帮助开发者快速构建数据...

    java 基于泛型与反射的通用 DAO

    本文将深入探讨如何结合这两种技术实现一个通用的DAO(Data Access Object)设计模式。 首先,我们来看“泛型”。泛型是Java 5引入的新特性,它允许在类、接口和方法中使用类型参数,从而提高了代码的类型安全性和...

    iBATIS-DAO-2

    ### iBATIS Data Access Objects (DAO):一种强大的持久层抽象技术 在深入探讨iBATIS Data Access Objects(DAO)的细节之前,我们先来理解一下这个概念的重要性以及它如何改变Java应用程序的开发方式。 #### 引言...

    基于DAO设计模式的新闻发布系统

    DAO(Data Access Object)设计模式是一种在软件工程中用于封装对数据库访问的模式,它将业务逻辑和数据访问逻辑分离,提高代码的可重用性和可测试性。在这个基于DAO设计模式的新闻发布系统中,我们可以深入探讨以下...

Global site tag (gtag.js) - Google Analytics