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

posted @ 2013-08-22 11:54  幻星宇  阅读(443)  评论(0编辑  收藏  举报