J2EE设计模式——DAO

原创 2015年07月10日 19:58:12
本篇文章将会讲解什么是DAO,如何和数据库连接,VO类,DAO接口,DAO实现和DAO工厂类

DAO设计模式是数据J2EE数据层的操作,使用DAO可以简化大量代码,增强可移植性

一.DAO各部分详解

DAO包括五个部分,分为数据库连接、VO、DAO接口、DAO实现类和DAO工厂类

1.数据库连接类

//连接MySQL数据库的示例:

import java.sql.*;

public class DataBaseConnection{
    //定义数据库驱动类
    private final String DBDRIVER = "com.mysql.jdbc.Driver";
    //定义数据库连接URL
    private final String DBURL = "jdbc:mysql://localhost:3306/test";
    //定义数据库连接用户名
    private final String DBUSER = "root";
    //定义密码
    private final String DBPASSWORD = "0000";
    //定义连接对象
    private Connection conn = null;
    //构造方法,加载驱动
    public DataBaseConnection(){
        try{
            Class.forName(DBDRIVER);
            this.conn = DriverManager.getConnection(DBURL,DBUSER,DBPASSWORD);
        }catch(Exception e){
            System.out.println("加载驱动失败");
        }
    }

    //取得数据库连接
    public Connection getConnection(){
        return conn;
    }

    //关闭数据库
    public void close(){
        try{
            conn.close();
        }catch(Exception e){
            System.out.println("数据库连接失败");
        }
    }
}

2.VO类
VO类是一个包含属性和表中字段完全对应的类,并在该类中提供set和get方法来获取属性

//一个User类的示例

public class User{
    private int userid;
    private String username;
    private String password;

    public int getUserid(){
        return userid;
    } 
    public void setUserid(int userid){
        this.userid = userid;
    }
    public String getUsername(){
        return username;
    }
    public void setUsername(String username){
        this.username = username;
    }
    public String getPassword(){
        return password;
    }
    public void setPassword(String password){
        this.password = password;
    }
}

3.DAO接口
DAO接口中定义了所有的用户的操作,如添加记录,删除,查询等,但接口只是定义,在实现类中实现

//一个接口示例:

import java.util.*;

public interface UserDAO{
    public void insert(User user) throws Exception;
    public void update(User user) throws Exception;
    public void delete(int userid) throws Exception;
    public User queryById(int userid) throws Exception;
    public List queryAll() throws Exception;
}

4.DAO实现类
DAO实现类实现了DAO的接口,并实现了DAO接口中定义的所有方法

//一个DAO实现类的示例

import java.sql.*;
import java.util.*;

public class UserDAOImpl implements UserDAO{
    //添加操作
    public void insert(User user) throws Exception{
        String sql = "INSERT INTO user(username,password) VALUES (?,?)";
        PreparedStatement pstmt = null;
        DataBaseConnection dbc = null;
        //对数据库的操作
        try{
            //连接数据库
            dbc = new DataBaseConnection();
            pstmt = dbc.getConnection().prepareStatement(sql);
            pstmt.setString(1,user.getUsername());
            pstmt.setString(2,user.getPassword());
            //数据库更新操作
            pstmt.executeUpdate();
            pstmt.close();
        }catch(Exception e){
            throw new Exception("操作异常");
        }finally{
            //关闭数据库
            dbc.close();
        }
    }


    //修改操作
    public void update(User user) throws Exception{
        String sql = "UPDATE user SET username=?, password=? WHERE userid=? ";
        PreparedStatement pstmt = null;
        DataBaseConnection dbc = null;
        //对数据库的操作
        try{
            //连接数据库
            dbc = new DataBaseConnection();
            pstmt = dbc.getConnection().prepareStatement(sql);
            pstmt.setString(1,user.getUsername());
            pstmt.setString(2,user.getPassword());
            pstmt.setInt(3,user.getUserid());
            //数据库更新操作
            pstmt.executeUpdate();
            pstmt.close();
        }catch(Exception e){
            throw new Exception("操作异常");
        }finally{
            //关闭数据库
            dbc.close();
        }
    }


    //删除操作
    public void delete(int userid) throws Exception{
        String sql = "DELETE  FROM user WHERE userid=?";
        PreparedStatement pstmt = null;
        DataBaseConnection dbc = null;
        //对数据库的操作
        try{
            //连接数据库
            dbc = new DataBaseConnection();
            pstmt = dbc.getConnection().prepareStstement(sql);
            pstmt.setInt(1,userid);
            //数据库更新操作
            pstmt.executeUpdate();
            pstmt.close();
        }catch(Exception e){
            throw new Exception("操作异常");
        }finally{
            //关闭数据库
            dbc.close();
        }
    }


    //按ID查询
    public User queryById(int userid) throws Exception{
        User user = null;//保存的user
        String sql = "SELECT * FROM user WHERE userid=?";
        PreparedStatement pstmt = null;
        DataBaseConnection dbc = null;
        //对数据库的操作
        try{
            //连接数据库
            dbc = new DataBaseConnection();
            pstmt = dbc.getConnection().prepareStstement(sql);
            pstmt.setInt(1,userid);
            //数据库查询操作
            ResultSet rs = pstmt.executeUpdate();
            if(rs.next()){
                //查询出内容,给user对象
                user = new User();
                user.setUserid(rs.getInt(1));
                user.setUsername(rs.getString(2));
                user.setPassword(rs.getString(3));
            }
            rs.close();
            pstmt.close();
        }catch(Exception e){
            throw new Exception("操作异常");
        }finally{
            //关闭数据库
            dbc.close();
        }
    }
}

5.DAO工厂类
在没有DAO工厂类的情况下必须创建DAO实现类的实例才能完成数据库操作。这时就必须知道具体的子类,对于后期的修改非常不便。使用DAO工厂类可以方便管理。

//一个DAO工厂类的示例:

public class DAOFactory{
    public static UserDAO getUserDAOInstance(){
        return new UserDAOImpl();
        //返回一个UserDAO的实例
    }
}

此时就可以利用DAO工厂类对数据库完成更简单的增删改查:

//增加
<%
    UserDAO userDAO = DAOFactory.getUserDAOInstance();
    /**设置需要添加的用户*/
    User user = new User();
    user.setUsername("dao");
    user.setPassword("123");
    userDAO.insert(user);
%>

//更新
<%
    UserDAO userDAO = DAOFactory.getUserDAOInstance();
    /**设置需要更新的用户*/
    User user = new User();
    user.setUserid(14);
    user.setUsername("dao");
    user.setPassword("123456");
    userDAO.update(user);
%>

//删除
<%
    UserDAO userDAO = DAOFactory.getUserDAOInstance();
    userDAO.delete(14);
    //可见删除操作很简便
%>

//按ID查询
<%
    UserDAO userDAO = DAOFactory.getUserDAOInstance();
    User user = userDAO.queryById(2);
    out.println("用户:"+user.getUsername());
    out.println("密码:"+user.password());
%>

在J2EE中,DAO设计模式非常重要,甚至将其作为一个单独的层:DAO层

版权声明:本文为博主原创文章,未经博主允许不得转载。

J2EE之DAO设计模式及简单实现

JAVAEE(Java Enterprise Edition ) 模式 : DAO模式 因此在了解DAO模式之前,我们先来学习一下Java EE的体系结构: (一)JavaEE体系结构 客户端:...
  • Megustas_JJC
  • Megustas_JJC
  • 2016年12月21日 15:59
  • 695

J2EE设计模式-Dao(Data Access Object)模式

高级 DAO 编程 学习编译更好的 DAO 的技巧 J2EE 开发人员使用数据访问对象(Data Access Object DAO)设计模式,以便将低级别的数据访问逻辑与...
  • ccp1994
  • ccp1994
  • 2014年09月10日 17:05
  • 1013

j2ee常用的设计模式

总共23种,分为三大类:创建型,结构型,行为型 我只记得其中常用的6、7种,分别是: 创建型(工厂、工厂方法、抽象工厂、单例) 结构型(包装、适配器,组合,代理) 行为(观察者,模版,策略) 然后再针...
  • u012927417
  • u012927417
  • 2014年08月06日 13:36
  • 3190

J2EE中dao层和Service层的理解

dao层 最基本的CRUD操作,方法体里的内容一两句代码搞定。如this.save(student)等等。   Service层 ①可能调用多个dao。有一个Service,叫StudentS...
  • woshixuye
  • woshixuye
  • 2012年01月19日 16:24
  • 2963

J2EE框架(四)核心设计模式

这一章主要讲两种设计模式:建造者设计模式和工厂设计模式,这两种设计模式在持久层框架基本上都是一起出现,建造者用于加载资源为工厂做好准备,工厂专门用来生产具体对象。这里的资源往往是框架开放给用户自定义的...
  • cd_cd
  • cd_cd
  • 2017年12月21日 16:40
  • 95

J2EE中的几种常用设计模式

介绍4种常用的设计模式: 1.业务委托模式:表示层组件将与业务层服务交互。这样,业务层改变会使表示层也需要改变。业务委托模式可以解决这个问题。 业务委托模式的目的就是减少表示层和业务层的耦合,隐藏...
  • guoxuepeng123
  • guoxuepeng123
  • 2012年08月10日 00:12
  • 1572

j2ee常用的设计模式?说明工厂模式

Java中的23种设计模式:Factory(工厂模式),Builder(建造模式),Factory Method(工厂方法模式),Prototype(原始模型模式),Singleton(单例模式),F...
  • v_fei
  • v_fei
  • 2007年11月28日 09:36
  • 1307

java设计模式--DAO模式

DAO设计模式 ★ DAO的理解 1、DAO其实是利用组合工厂模式来解决问题的,并没有带来新的功能,所以学的其实就是个思路。 2、DAO理论上是没有层数限制的。 3、DAO的各层理...
  • Dragon_Dai_2017
  • Dragon_Dai_2017
  • 2017年08月08日 20:35
  • 195

DAO设计模式简介

DAO(Data Access Object,数据访问对象),主要的功能是用于进行数据操作的,在程序的标准开发框架中属于数据层的操作。 数据开发结构: 资源层是数据库的操作层,里面可以进行...
  • thystar
  • thystar
  • 2014年12月07日 12:57
  • 3175

Java 分层设计(DAO设计模式)

此文章是本人学习mldn魔乐科技DAO设计模式教学视频后,总结下来,用于复习使用,在这里感谢mldn的学习视频。 DAO设计模式? DAO全称是(Data Access Object,数据库访问对象)...
  • CoderBruis
  • CoderBruis
  • 2017年05月25日 13:44
  • 1427
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:J2EE设计模式——DAO
举报原因:
原因补充:

(最多只允许输入30个字)