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

  • 相关阅读:
    Python随机数生成方法
    Django 数据聚合函数 annotate
    django获取某一个字段的列表,values/values_list/flat
    网页调用百度地图导航
    iOS webView与H5的交互(返回页面的处理)
    移除HTML5 input在type="number"时的上下小箭头
    去除a标签的下划线
    css实现单行的靠左靠右和居中效果
    查看flash的版本
    App版本号定义与说明基础知识
  • 原文地址:https://www.cnblogs.com/xingmeng/p/3274542.html
Copyright © 2011-2022 走看看