zoukankan      html  css  js  c++  java
  • 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只负责显示的效果。

  • 相关阅读:
    Docker 入门指南——Dockerfile 指令
    这个断点可以帮你检查布局约束
    个推你应该这样用的
    网易云直播SDK使用总结
    当微信和支付宝遇上友盟
    环信SDK 头像、昵称、表情自定义和群聊设置的实现 二(附源码)
    环信SDK 头像、昵称、表情自定义和群聊设置的实现 一(附源码)
    事件分发机制
    常用开发技巧系列(一)
    iOS RunTime你知道了总得用一下
  • 原文地址:https://www.cnblogs.com/ChrisMurphy/p/4817478.html
Copyright © 2011-2022 走看看