您的位置:首页 > 编程语言 > Java开发

JavaBean中DAO设计模式介绍

2017-03-29 09:50 363 查看
目录(?)[-]
一信息系统的开发架构
二DAOData Access Object介绍
三DAO设计模式的结构
四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
plain copy

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
plain copy

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
plain copy

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
plain copy

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
plain copy

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
plain copy

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
plain copy

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只负责显示的效果。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: