J2EE设计模式——DAO

本篇文章将会讲解什么是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层

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值