首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件开发 >

JavaBean中DAO设计方式介绍

2013-10-30 
JavaBean中DAO设计模式介绍原文地址一、信息系统的开发架构客户层-------显示层-------业务层---------数据

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

?

[java] view plaincopy
  1. package?org.vo;??import?java.util.*;??
  2. public?class?Emp{??????private?int?empno;??
  3. ????private?String?ename;??????private?String?job;??
  4. ????private?Date?hireDate;??????private?float?sal;??
  5. ????public?Emp(){????????????
  6. ????}??????public?int?getEmpno(){??
  7. ????????return?empno;??????}??
  8. ????public?void?setEmpno(int?empno){??????????this.empno?=?empno;??
  9. ????}??????public?String?getEname(){??
  10. ????????return?ename;??????}??
  11. ????public?void?setEname(String?ename){??????????this.ename?=?ename;??
  12. ????}??????public?Date?getHireDate(){??
  13. ????????return?hireDate;??????}??
  14. ????public?void?setHireDate(Date?hireDate){??????????this.hireDate?=?hireDate;??
  15. ????}??????public?float?getSal(){??
  16. ????????return?sal;??????}??
  17. ????public?void?setSal(float?sal){??????????this.sal?=?sal;??
  18. ????}??????public?String?getJob(){??
  19. ????????return?job;??????}??
  20. ????public?void?setJob(String?job){??????????this.job?=?job;??
  21. ????}??}??

2.DatabaseConnection.java

[java] view plaincopy
  1. package?org.dbc;??import?java.sql.*;??
  2. public?class?DatabaseConnection{??????private?Connection?con?=?null;??
  3. ????private?static?final?String?DRIVER?=?"com.mysql.jdbc.Driver";??????private?static?final?String?USER?=?"root";??
  4. ????private?static?final?String?URL?=?"jdbc:mysql://localhost:3306/mldn";??????private?static?final?String?PASS?=?"12345";??
  5. ????public?DatabaseConnection()throws?Exception{??????????Class.forName(DRIVER);??
  6. ????????con?=?DriverManager.getConnection(URL,USER,PASS);??????}??
  7. ????public?Connection?getConnection()throws?Exception{??????????return?con;??
  8. ????}??????public?void?close()throws?Exception{??
  9. ????????if(con!=null){??????????????con.close();??
  10. ????????}??????}??
  11. }??

3.IEmpDAO.java

[java] view plaincopy
  1. package?org.dao;??import?java.util.List;??
  2. import?org.vo.*;??public?interface?IEmpDAO{??
  3. ????public?boolean?doCreate(Emp?emp)throws?Exception;??????public?List<Emp>?findAll()throws?Exception;??
  4. ????public?Emp?findById(int?empno)throws?Exception;??}??

4.EmpDAOImpl.java

[java] view plaincopy
  1. package?org.dao.impl;??import?org.dao.*;??
  2. import?java.sql.*;??import?org.vo.*;??
  3. import?java.util.*;??public?class?EmpDAOImpl?implements?IEmpDAO{??
  4. ????private?Connection?con;??????private?PreparedStatement?stat?=?null;??
  5. ????public?EmpDAOImpl(Connection?con){??????????this.con?=?con;??
  6. ????}??????public?boolean?doCreate(Emp?emp)throws?Exception{??
  7. ????????String?sql?=?"INSERT?INTO?emp(empno,ename,job,hiredate,sal)?VALUES(?,?,?,?,?)";??????????stat?=?con.prepareStatement(sql);??
  8. ????????stat.setInt(1,emp.getEmpno());??????????stat.setString(2,emp.getEname());??
  9. ????????stat.setString(3,emp.getJob());??????????stat.setDate(4,new?java.sql.Date(emp.getHireDate().getTime()));??
  10. ????????stat.setFloat(5,emp.getSal());??????????int?update?=?stat.executeUpdate();??
  11. ????????if(update>0){??????????????return?true;??
  12. ????????}??????????else{??
  13. ????????????return?false;??????????}??
  14. ????}??????public?List<Emp>?findAll()throws?Exception{??
  15. ????????String?sql?=?"SELECT?empno,ename,job,hiredate,sal?FROM?emp";??????????stat?=?con.prepareStatement(sql);??
  16. ????????ResultSet?rs?=?stat.executeQuery();??????????Emp?emp?=?null;??
  17. ????????List<Emp>?list?=?new?ArrayList<Emp>();??????????while(rs.next()){??
  18. ????????????int?empno?=?rs.getInt(1);??????????????String?ename?=?rs.getString(2);??
  19. ????????????String?job?=?rs.getString(3);??????????????float?sal?=?rs.getFloat(5);??
  20. ????????????emp?=?new?Emp();??????????????emp.setEmpno(empno);??
  21. ????????????emp.setEname(ename);??????????????emp.setJob(job);??
  22. ????????????emp.setHireDate(rs.getDate(4));??????????????emp.setSal(sal);??
  23. ????????????list.add(emp);??????????}??
  24. ????????return?list;??????}??
  25. ????public?Emp?findById(int?empno)throws?Exception{??????????String?sql?=?"SELECT?empno,ename,job,hiredate,sal?FROM?emp?WHERE?empno=?";??
  26. ????????stat?=?con.prepareStatement(sql);??????????stat.setInt(1,empno);??
  27. ????????ResultSet?rs?=?stat.executeQuery();??????????Emp?emp?=?null;??
  28. ????????if(rs.next()){??????????????String?ename?=?rs.getString(2);??
  29. ????????????String?job?=?rs.getString(3);??????????????float?sal?=?rs.getFloat(5);??
  30. ????????????emp?=?new?Emp();??????????????emp.setEmpno(empno);??
  31. ????????????emp.setEname(ename);??????????????emp.setJob(job);??
  32. ????????????emp.setHireDate(rs.getDate(4));??????????????emp.setSal(sal);??
  33. ????????}??????????return?emp;??
  34. ????}??}??


5.EmpDAOProxy.java

[java] view plaincopy
  1. package?org.dao.impl;??import?org.dao.*;??
  2. import?java.sql.*;??import?org.vo.*;??
  3. import?java.util.*;??import?org.dbc.*;??
  4. public?class?EmpDAOProxy?implements?IEmpDAO{??????private?DatabaseConnection?dbc;??
  5. ????private?IEmpDAO?dao?=?null;??????public?EmpDAOProxy()throws?Exception{??
  6. ????????dbc?=?new?DatabaseConnection();??????????dao?=?new?EmpDAOImpl(dbc.getConnection());??
  7. ????}??????public?boolean?doCreate(Emp?emp)throws?Exception{??
  8. ????????boolean?flag?=?false;??????????if(dao.findById(emp.getEmpno())==null){??
  9. ????????????flag?=?dao.doCreate(emp);??????????}??
  10. ????????dbc.close();??????????return?flag;??
  11. ????}??????public?List<Emp>?findAll()throws?Exception{??
  12. ????????List<Emp>list?=?dao.findAll();??????????dbc.close();??
  13. ????????return?list;??????}??
  14. ????public?Emp?findById(int?empno)throws?Exception{??????????Emp?emp?=?dao.findById(empno);??
  15. ????????dbc.close();??????????return?emp;??
  16. ????}??}??

6.DAOFactory.java

[java] view plaincopy
  1. package?org.dao.factory;??import?org.dao.*;??
  2. import?java.sql.*;??import?org.vo.*;??
  3. import?java.util.*;??import?org.dbc.*;??
  4. import?org.dao.impl.*;??public?class?DAOFactory{??
  5. ????public?static?IEmpDAO?getInstance(){??????????IEmpDAO?dao?=?null;??
  6. ????????try{??????????????dao?=?new?EmpDAOProxy();??????
  7. ????????}??????????catch(Exception?e){??
  8. ????????????e.printStackTrace();??????????}??
  9. ????????return?dao;??????}??
  10. }??


7.TestDAO.java

[java] view plaincopy
  1. package?org.dao.test;??import?org.dao.factory.*;??
  2. import?org.vo.*;??import?org.dao.*;??
  3. public?class?TestDAO{??????public?static?void?main(String?args[])throws?Exception{??
  4. ????????Emp?emp?=?null;??????????for(int?i=0;i<5;i++){??
  5. ????????????emp?=?new?Emp();??????????????emp.setEmpno(i);??
  6. ????????????emp.setEname("xiazdong-"+i);??????????????emp.setJob("stu-"+i);??
  7. ????????????emp.setHireDate(new?java.util.Date());??????????????emp.setSal(500*i);??
  8. ????????????DAOFactory.getInstance().doCreate(emp);??????????}??
  9. ????}??}??


通过DAO设计模式,可以在JSP中屏蔽了数据库连接的操作,达到JSP只负责显示的效果。

热点排行