你的位置:首页 > ASP.net教程

[ASP.net教程]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   连接数据库操作

[java] view plaincopy

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

[java] view plaincopy

  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 plaincopy

  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 plaincopy

  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 plaincopy

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