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

1.为什么使用Dao       Dao是数据访问层用到的设计模式,那么他就是为了数据访问层而存在的。 数据访问层负责的是很数据库打交道,比如连接数据库,对数据库中的数据进行增删改查的操作,关闭数...

J2EE之DAO设计模式简介与实例

在JAVA编程的时候, 有时候看起来非常直接的实现却非要用设计模式转若干个弯去实现他, 这似乎显的很多余,但是采用一些成熟的设计模式,会使程序更加的健壮,松耦合以及好维护和扩展.  DAO 设计模式...
  • Dancen
  • Dancen
  • 2012年02月19日 23:53
  • 2220

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

JAVAEE(Java Enterprise Edition ) 模式 : DAO模式 因此在了解DAO模式之前,我们先来学习一下Java EE的体系结构: (一)JavaEE体系结构 客户端:...

关于工厂和dao(j2ee设计模式和GOF的设计模式)

首先要搞清楚的一点是j2ee设计模式和GOF的设计模式是不一样的,dao是属于j2ee设计模式里面的一种,属于 GoF中策略模式的特例,j2ee的设计模式只是用在j2ee里面的GOF的工厂模式就只有两...
  • yjsuge
  • yjsuge
  • 2011年07月04日 11:26
  • 762

J2EE设计模式——MVC

MVC即把交互系统分为模型、视图、控制器三部件,其中: (1)模型:业务的流程、状态的处理、业务规则的制定 (2)视图:用户界面 (3)控制器:接受用户请求,分配合适的模型和视图 在Java ...

J2EE的体系结构和MVC设计模式

J2EE规范提出了自己的n-tiers结构。 在普通应用中,我们大多会按如下方式划分: 表示层:管理用户的请求,对用户的请求做出相应的响应,并向用户显示出相应信息。Struts框架...
  • B_H_L
  • B_H_L
  • 2012年05月29日 10:51
  • 716

JAVA笔试题集-J2EE,MVC,设计模式,UML,LINUX

114、 MVC 的各个部分都有那些技术来实现 ? 如何实现 ? 答: MVC 是 Model - View - Controller 的简写。 "Model" 代表的是应用的业务逻辑(通过 Java...
  • xcywwj
  • xcywwj
  • 2011年01月17日 21:14
  • 818

CHARISMA平台采用J2EE技术构建,MVC设计模式

CHARISMA平台采用J2EE技术构建,MVC设计模式,具有完全独立知识产权开放式框架,并引进SOA先进的理念及ajax技术,采用创新的基于引擎模式实现的纯B/S多层结构智能WEB平台。平台具有极高...

自己理解的J2EE三层架构(与软件设计模式的联系区别)

转载:http://kunga.javaeye.com/blog/363076 1.J2EE分3层: 服务器端业务逻辑(有业务逻辑层和持久化数据层,Businness Tier 和EIS Tie...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:J2EE设计模式——DAO
举报原因:
原因补充:

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