`

DAO设计模式

    博客分类:
  • DAO
阅读更多
一、信息系统的开发架构


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

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 plaincopyprint?
01.package org.vo; 
02.import java.util.*; 
03.public class Emp{ 
04.    private int empno; 
05.    private String ename; 
06.    private String job; 
07.    private Date hireDate; 
08.    private float sal; 
09.    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.} 
package org.vo;
import java.util.*;
public class Emp{
private int empno;
private String ename;
private String job;
private Date hireDate;
private float sal;
public Emp(){

}
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 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;
}
public String getJob(){
return job;
}
public void setJob(String job){
this.job = job;
}
}2.DatabaseConnection.java


[java] view plaincopyprint?
01.package org.dbc; 
02.import java.sql.*; 
03.public class DatabaseConnection{ 
04.    private Connection con = null; 
05.    private static final String DRIVER = "com.mysql.jdbc.Driver"; 
06.    private static final String USER = "root"; 
07.    private static final String URL = "jdbc:mysql://localhost:3306/mldn"; 
08.    private static final String PASS = "12345"; 
09.    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.} 
package org.dbc;
import java.sql.*;
public class DatabaseConnection{
private Connection con = null;
private static final String DRIVER = "com.mysql.jdbc.Driver";
private static final String USER = "root";
private static final String URL = "jdbc:mysql://localhost:3306/mldn";
private static final String PASS = "12345";
public DatabaseConnection()throws Exception{
Class.forName(DRIVER);
con = DriverManager.getConnection(URL,USER,PASS);
}
public Connection getConnection()throws Exception{
return con;
}
public void close()throws Exception{
if(con!=null){
con.close();
}
}
}3.IEmpDAO.java


[java] view plaincopyprint?
01.package org.dao; 
02.import java.util.List; 
03.import org.vo.*; 
04.public interface IEmpDAO{ 
05.    public boolean doCreate(Emp emp)throws Exception; 
06.    public List<Emp> findAll()throws Exception; 
07.    public Emp findById(int empno)throws Exception; 
08.} 
package org.dao;
import java.util.List;
import org.vo.*;
public interface IEmpDAO{
public boolean doCreate(Emp emp)throws Exception;
public List<Emp> findAll()throws Exception;
public Emp findById(int empno)throws Exception;
}4.EmpDAOImpl.java


[java] view plaincopyprint?
01.package org.dao.impl; 
02.import org.dao.*; 
03.import java.sql.*; 
04.import org.vo.*; 
05.import java.util.*; 
06.public class EmpDAOImpl implements IEmpDAO{ 
07.    private Connection con; 
08.    private PreparedStatement stat = null; 
09.    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.} 
package org.dao.impl;
import org.dao.*;
import java.sql.*;
import org.vo.*;
import java.util.*;
public class EmpDAOImpl implements IEmpDAO{
private Connection con;
private PreparedStatement stat = null;
public EmpDAOImpl(Connection con){
this.con = con;
}
public boolean doCreate(Emp emp)throws Exception{
String sql = "INSERT INTO emp(empno,ename,job,hiredate,sal) VALUES(?,?,?,?,?)";
stat = con.prepareStatement(sql);
stat.setInt(1,emp.getEmpno());
stat.setString(2,emp.getEname());
stat.setString(3,emp.getJob());
stat.setDate(4,new java.sql.Date(emp.getHireDate().getTime()));
stat.setFloat(5,emp.getSal());
int update = stat.executeUpdate();
if(update>0){
return true;
}
else{
return false;
}
}
public List<Emp> findAll()throws Exception{
String sql = "SELECT empno,ename,job,hiredate,sal FROM emp";
stat = con.prepareStatement(sql);
ResultSet rs = stat.executeQuery();
Emp emp = null;
List<Emp> list = new ArrayList<Emp>();
while(rs.next()){
int empno = rs.getInt(1);
String ename = rs.getString(2);
String job = rs.getString(3);
float sal = rs.getFloat(5);
emp = new Emp();
emp.setEmpno(empno);
emp.setEname(ename);
emp.setJob(job);
emp.setHireDate(rs.getDate(4));
emp.setSal(sal);
list.add(emp);
}
return list;
}
public Emp findById(int empno)throws Exception{
String sql = "SELECT empno,ename,job,hiredate,sal FROM emp WHERE empno=?";
stat = con.prepareStatement(sql);
stat.setInt(1,empno);
ResultSet rs = stat.executeQuery();
Emp emp = null;
if(rs.next()){
String ename = rs.getString(2);
String job = rs.getString(3);
float sal = rs.getFloat(5);
emp = new Emp();
emp.setEmpno(empno);
emp.setEname(ename);
emp.setJob(job);
emp.setHireDate(rs.getDate(4));
emp.setSal(sal);
}
return emp;
}
}
5.EmpDAOProxy.java


[java] view plaincopyprint?
01.package org.dao.impl; 
02.import org.dao.*; 
03.import java.sql.*; 
04.import org.vo.*; 
05.import java.util.*; 
06.import org.dbc.*; 
07.public class EmpDAOProxy implements IEmpDAO{ 
08.    private DatabaseConnection dbc; 
09.    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.} 
package org.dao.impl;
import org.dao.*;
import java.sql.*;
import org.vo.*;
import java.util.*;
import org.dbc.*;
public class EmpDAOProxy implements IEmpDAO{
private DatabaseConnection dbc;
private IEmpDAO dao = null;
public EmpDAOProxy()throws Exception{
dbc = new DatabaseConnection();
dao = new EmpDAOImpl(dbc.getConnection());
}
public boolean doCreate(Emp emp)throws Exception{
boolean flag = false;
if(dao.findById(emp.getEmpno())==null){
flag = dao.doCreate(emp);
}
dbc.close();
return flag;
}
public List<Emp> findAll()throws Exception{
List<Emp>list = dao.findAll();
dbc.close();
return list;
}
public Emp findById(int empno)throws Exception{
Emp emp = dao.findById(empno);
dbc.close();
return emp;
}
}6.DAOFactory.java


[java] view plaincopyprint?
01.package org.dao.factory; 
02.import org.dao.*; 
03.import java.sql.*; 
04.import org.vo.*; 
05.import java.util.*; 
06.import org.dbc.*; 
07.import org.dao.impl.*; 
08.public class DAOFactory{ 
09.    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.} 
package org.dao.factory;
import org.dao.*;
import java.sql.*;
import org.vo.*;
import java.util.*;
import org.dbc.*;
import org.dao.impl.*;
public class DAOFactory{
public static IEmpDAO getInstance(){
IEmpDAO dao = null;
try{
dao = new EmpDAOProxy();
}
catch(Exception e){
e.printStackTrace();
}
return dao;
}
}
7.TestDAO.java


[java] view plaincopyprint?
01.package org.dao.test; 
02.import org.dao.factory.*; 
03.import org.vo.*; 
04.import org.dao.*; 
05.public class TestDAO{ 
06.    public static void main(String args[])throws Exception{ 
07.        Emp emp = null; 
08.        for(int i=0;i<5;i++){ 
09.            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.} 
package org.dao.test;
import org.dao.factory.*;
import org.vo.*;
import org.dao.*;
public class TestDAO{
public static void main(String args[])throws Exception{
Emp emp = null;
for(int i=0;i<5;i++){
emp = new Emp();
emp.setEmpno(i);
emp.setEname("xiazdong-"+i);
emp.setJob("stu-"+i);
emp.setHireDate(new java.util.Date());
emp.setSal(500*i);
DAOFactory.getInstance().doCreate(emp);
}
}
}
通过DAO设计模式,可以在JSP中屏蔽了数据库连接的操作,达到JSP只负责显示的效果。

分享到:
评论

相关推荐

    DAO设计模式 DAO 设计模式 JAVA设计模式

    DAO(Data Access Object)设计模式是软件开发中一种常见的用于处理数据访问的模式,它将业务逻辑与数据访问逻辑分离,使得代码结构更加...因此,深入理解并灵活运用DAO设计模式对于提升Java应用程序的质量至关重要。

    DAO设计模式DAO设计模式

    ### DAO设计模式详解 #### 一、概述 数据访问对象(Data Access Object,简称DAO)设计模式是一种在软件工程特别是企业级应用开发中非常常见的设计模式。它的主要目的是分离业务逻辑与数据访问逻辑,使系统架构...

    DAO设计模式辅助资料

    这个压缩包文件"DAO设计模式辅助资料"显然是为了帮助开发者更好地理解和应用DAO模式。下面,我们将深入探讨DAO设计模式的核心概念、实现方式以及它在实际开发中的应用。 DAO设计模式的基本思想是为数据库操作创建一...

    JSP+Servlet+AJAX的dao设计模式

    **JSP+Servlet+AJAX DAO设计模式详解** 在Web开发中,DAO(Data Access Object)设计模式是一种常用的设计模式,用于将业务逻辑与数据访问层进行解耦,提高代码的可维护性和可复用性。本篇我们将深入探讨如何在JSP...

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

    在这个基于DAO设计模式的新闻发布系统中,我们可以深入探讨以下几个核心知识点: 1. DAO设计模式:DAO模式的核心思想是创建一个接口,该接口定义了对数据存储的通用操作,然后实现这个接口以处理具体的数据库交互。...

    DAO设计模式(工厂+代理)

    在这个“DAO设计模式(工厂+代理)”的例子中,我们将探讨如何结合工厂模式和代理模式来实现更灵活、更易于维护的DAO层。 首先,让我们理解DAO的基本概念。DAO是一个接口或抽象类,定义了对数据库进行操作的方法,...

    李兴华DAO设计模式

    在描述的课程中,李兴华先生讲解了DAO设计模式,并通过实例分析来阐述如何在业务层和服务层之间进行交互。例如,业务层可能需要实现以下功能: 1. 新雇员增加:业务层首先检查雇员编号是否已存在(调用数据层的查询...

    Dao设计模式

    DAO设计模式是Java开发中常用的一种数据访问模式,它将底层数据访问操作与上层业务逻辑相分离。这一模式的目的在于封装所有对数据源的访问,并提供抽象接口,使得业务逻辑层与数据访问层解耦,从而降低业务代码与...

    J2EE学习笔记--DAO设计模式基础.txt

    ### J2EE学习笔记——DAO设计模式基础 #### 一、引言 在J2EE(Java 2 Enterprise Edition)开发中,DAO (Data Access Object) 设计模式是一种常用的数据访问层实现方式,用于分离业务逻辑与数据访问逻辑,使得程序...

    李兴华 DAO设计模式 实现 增删改查 分页查询 完整代码

    在这个“李兴华 DAO设计模式 实现 增删改查 分页查询 完整代码”项目中,我们将探讨DAO模式如何应用于实现数据库的CRUD(创建、读取、更新、删除)操作以及分页查询。 1. DAO设计模式基础: DAO设计模式的核心是...

    DAO设计模式精讲(java web开发)

    在本精讲中,我们将深入探讨DAO设计模式的原理、实现方式以及在实际项目中的应用。 **DAO设计模式的核心思想** DAO设计模式的核心是创建一个接口,该接口定义了对数据库进行操作的方法,如查询、插入、更新和删除...

    Dao设计模式教程

    在本教程中,我们将深入探讨DAO设计模式的各个方面,包括其概念、优点、结构以及如何在实际项目中应用。 1. **DAO设计模式的概念** DAO设计模式是一种面向对象的设计模式,用于处理应用程序和数据存储之间的交互。...

    WEB开发经典之 DAO设计模式

    **DAO设计模式详解** 在Web开发中,DAO(Data Access Object)设计模式是一种常见的用于分离业务逻辑层与数据访问层的架构模式。DAO的主要目的是为了提供一个统一的接口,使得业务逻辑组件可以与数据库交互而无需...

    初步认识JAVA DAO设计模式

    总结来说,DAO设计模式在Java开发中扮演着重要的角色,尤其是在处理数据持久化问题时,它提供了一种灵活且可扩展的方式来管理数据访问,降低了系统的复杂性,提高了代码的可维护性。通过将数据访问逻辑封装在DAO中,...

    Java DAO 设计模式.pdf

    #### 一、DAO设计模式的概念 **DAO**(Data Access Object)设计模式是一种在Java EE环境中广泛使用的数据访问模式,它主要应用于处理数据存储组件的交互。这种模式的主要目的是将底层数据访问操作与业务逻辑分开,...

    初步认识JAVA+DAO设计模式.pdf

    本文将详细讲解JAVA+DAO设计模式的概念、原理和实现。 DAO 设计模式背景 在软件开发中,数据持久化是一个非常重要的步骤。不同的数据源会有不同的访问机制和API,这使得程序的开发和维护变得非常复杂。例如,在...

    JavaEE技术-DAO设计模式

    DAO设计模式是JavaEE中用于数据层操作的一种模式,其核心目的是简化代码编写、提高可移植性,以及实现更好的代码维护和可读性。在没有使用DAO设计模式之前,数据库操作通常直接在JSP页面中使用JDBC代码,或者通过...

Global site tag (gtag.js) - Google Analytics