JavaBean中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   VO类

[java] view plaincopy

    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   连接数据库操作

    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   dao接口

    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   接口的实现类

    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   数据库开关

    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  工厂类

    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

    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只负责显示的效果。

posted @ 2015-09-17 19:39  ChrisMurphy  阅读(419)  评论(0编辑  收藏  举报