JavaBean中DAO设计模式介绍

    xiaoxiao2021-03-25  89

    一、信息系统的开发架构

    客户层——-显示层——-业务层———数据层———数据库

    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 print ? 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;      }  }   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 print ? 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();          }      }  }   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 print ? 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;  }   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 print ? 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;      }  }   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 print ? 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;      }  }   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 print ? 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;      }  }   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 print ? 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);          }      }  }   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只负责显示的效果。

    转载请注明原文地址: https://ju.6miu.com/read-19848.html

    最新回复(0)