首页 > 学院 > 开发设计 > 正文

JavaBean中DAO设计模式简介

2019-11-14 15:36:52
字体:
来源:转载
供稿:网友

一、信息系统的开发架构


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

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


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表