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

    1. package org.vo;  
    2. import java.util.*;  
    3. public class Emp{  
    4.     private int empno;  
    5.     private String ename;  
    6.     private String job;  
    7.     private Date hireDate;  
    8.     private float sal;  
    9.     public Emp(){  
    10.           
    11.     }  
    12.     public int getEmpno(){  
    13.         return empno;  
    14.     }  
    15.     public void setEmpno(int empno){  
    16.         this.empno = empno;  
    17.     }  
    18.     public String getEname(){  
    19.         return ename;  
    20.     }  
    21.     public void setEname(String ename){  
    22.         this.ename = ename;  
    23.     }  
    24.     public Date getHireDate(){  
    25.         return hireDate;  
    26.     }  
    27.     public void setHireDate(Date hireDate){  
    28.         this.hireDate = hireDate;  
    29.     }  
    30.     public float getSal(){  
    31.         return sal;  
    32.     }  
    33.     public void setSal(float sal){  
    34.         this.sal = sal;  
    35.     }  
    36.     public String getJob(){  
    37.         return job;  
    38.     }  
    39.     public void setJob(String job){  
    40.         this.job = job;  
    41.     }  
    42. }  

    2.DatabaseConnection.java

    1. package org.dbc;  
    2. import java.sql.*;  
    3. public class DatabaseConnection{  
    4.     private Connection con = null;  
    5.     private static final String DRIVER = "com.mysql.jdbc.Driver";  
    6.     private static final String USER = "root";  
    7.     private static final String URL = "jdbc:mysql://localhost:3306/mldn";  
    8.     private static final String PASS = "12345";  
    9.     public DatabaseConnection()throws Exception{  
    10.         Class.forName(DRIVER);  
    11.         con = DriverManager.getConnection(URL,USER,PASS);  
    12.     }  
    13.     public Connection getConnection()throws Exception{  
    14.         return con;  
    15.     }  
    16.     public void close()throws Exception{  
    17.         if(con!=null){  
    18.             con.close();  
    19.         }  
    20.     }  
    21. }  

    3.IEmpDAO.java

    1. package org.dao;  
    2. import java.util.List;  
    3. import org.vo.*;  
    4. public interface IEmpDAO{  
    5.     public boolean doCreate(Emp emp)throws Exception;  
    6.     public List<Emp> findAll()throws Exception;  
    7.     public Emp findById(int empno)throws Exception;  
    8. }  

    4.EmpDAOImpl.java

    1. package org.dao.impl;  
    2. import org.dao.*;  
    3. import java.sql.*;  
    4. import org.vo.*;  
    5. import java.util.*;  
    6. public class EmpDAOImpl implements IEmpDAO{  
    7.     private Connection con;  
    8.     private PreparedStatement stat = null;  
    9.     public EmpDAOImpl(Connection con){  
    10.         this.con = con;  
    11.     }  
    12.     public boolean doCreate(Emp emp)throws Exception{  
    13.         String sql = "INSERT INTO emp(empno,ename,job,hiredate,sal) VALUES(?,?,?,?,?)";  
    14.         stat = con.prepareStatement(sql);  
    15.         stat.setInt(1,emp.getEmpno());  
    16.         stat.setString(2,emp.getEname());  
    17.         stat.setString(3,emp.getJob());  
    18.         stat.setDate(4,new java.sql.Date(emp.getHireDate().getTime()));  
    19.         stat.setFloat(5,emp.getSal());  
    20.         int update = stat.executeUpdate();  
    21.         if(update>0){  
    22.             return true;  
    23.         }  
    24.         else{  
    25.             return false;  
    26.         }  
    27.     }  
    28.     public List<Emp> findAll()throws Exception{  
    29.         String sql = "SELECT empno,ename,job,hiredate,sal FROM emp";  
    30.         stat = con.prepareStatement(sql);  
    31.         ResultSet rs = stat.executeQuery();  
    32.         Emp emp = null;  
    33.         List<Emp> list = new ArrayList<Emp>();  
    34.         while(rs.next()){  
    35.             int empno = rs.getInt(1);  
    36.             String ename = rs.getString(2);  
    37.             String job = rs.getString(3);  
    38.             float sal = rs.getFloat(5);  
    39.             emp = new Emp();  
    40.             emp.setEmpno(empno);  
    41.             emp.setEname(ename);  
    42.             emp.setJob(job);  
    43.             emp.setHireDate(rs.getDate(4));  
    44.             emp.setSal(sal);  
    45.             list.add(emp);  
    46.         }  
    47.         return list;  
    48.     }  
    49.     public Emp findById(int empno)throws Exception{  
    50.         String sql = "SELECT empno,ename,job,hiredate,sal FROM emp WHERE empno=?";  
    51.         stat = con.prepareStatement(sql);  
    52.         stat.setInt(1,empno);  
    53.         ResultSet rs = stat.executeQuery();  
    54.         Emp emp = null;  
    55.         if(rs.next()){  
    56.             String ename = rs.getString(2);  
    57.             String job = rs.getString(3);  
    58.             float sal = rs.getFloat(5);  
    59.             emp = new Emp();  
    60.             emp.setEmpno(empno);  
    61.             emp.setEname(ename);  
    62.             emp.setJob(job);  
    63.             emp.setHireDate(rs.getDate(4));  
    64.             emp.setSal(sal);  
    65.         }  
    66.         return emp;  
    67.     }  
    68. }  


    5.EmpDAOProxy.java

    1. package org.dao.impl;  
    2. import org.dao.*;  
    3. import java.sql.*;  
    4. import org.vo.*;  
    5. import java.util.*;  
    6. import org.dbc.*;  
    7. public class EmpDAOProxy implements IEmpDAO{  
    8.     private DatabaseConnection dbc;  
    9.     private IEmpDAO dao = null;  
    10.     public EmpDAOProxy()throws Exception{  
    11.         dbc = new DatabaseConnection();  
    12.         dao = new EmpDAOImpl(dbc.getConnection());  
    13.     }  
    14.     public boolean doCreate(Emp emp)throws Exception{  
    15.         boolean flag = false;  
    16.         if(dao.findById(emp.getEmpno())==null){  
    17.             flag = dao.doCreate(emp);  
    18.         }  
    19.         dbc.close();  
    20.         return flag;  
    21.     }  
    22.     public List<Emp> findAll()throws Exception{  
    23.         List<Emp>list = dao.findAll();  
    24.         dbc.close();  
    25.         return list;  
    26.     }  
    27.     public Emp findById(int empno)throws Exception{  
    28.         Emp emp = dao.findById(empno);  
    29.         dbc.close();  
    30.         return emp;  
    31.     }  
    32. }  

    6.DAOFactory.java

    1. package org.dao.factory;  
    2. import org.dao.*;  
    3. import java.sql.*;  
    4. import org.vo.*;  
    5. import java.util.*;  
    6. import org.dbc.*;  
    7. import org.dao.impl.*;  
    8. public class DAOFactory{  
    9.     public static IEmpDAO getInstance(){  
    10.         IEmpDAO dao = null;  
    11.         try{  
    12.             dao = new EmpDAOProxy();      
    13.         }  
    14.         catch(Exception e){  
    15.             e.printStackTrace();  
    16.         }  
    17.         return dao;  
    18.     }  
    19. }  


    7.TestDAO.java

    1. package org.dao.test;  
    2. import org.dao.factory.*;  
    3. import org.vo.*;  
    4. import org.dao.*;  
    5. public class TestDAO{  
    6.     public static void main(String args[])throws Exception{  
    7.         Emp emp = null;  
    8.         for(int i=0;i<5;i++){  
    9.             emp = new Emp();  
    10.             emp.setEmpno(i);  
    11.             emp.setEname("xiazdong-"+i);  
    12.             emp.setJob("stu-"+i);  
    13.             emp.setHireDate(new java.util.Date());  
    14.             emp.setSal(500*i);  
    15.             DAOFactory.getInstance().doCreate(emp);  
    16.         }  
    17.     }  
    18. }  


    通过DAO设计模式,可以在JSP中屏蔽了数据库连接的操作,达到JSP只负责显示的效果。

  • 相关阅读:
    bzoj3524: [Poi2014]Couriers(主席树)
    51nod 1275 连续子段的差异(twopointer+单调队列)
    51nod 1274 最长递增路径(DP)
    51nod 1273 旅行计划(思维题)
    51nod 1257 背包问题 V3(分数规划)
    CSS 几款比较常用的翻转特效
    css文字飞入效果
    jQuery使用方法
    数据库
    关系型数据库基本概念及MySQL简述
  • 原文地址:https://www.cnblogs.com/Struggles/p/4109870.html
Copyright © 2011-2022 走看看