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

你可能感兴趣的:(javabean)