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;
  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. public int getEmpno(){
  12. return empno;
  13. }
  14. public void setEmpno(int empno){
  15. this.empno = empno;
  16. }
  17. public String getEname(){
  18. return ename;
  19. }
  20. public void setEname(String ename){
  21. this.ename = ename;
  22. }
  23. public Date getHireDate(){
  24. return hireDate;
  25. }
  26. public void setHireDate(Date hireDate){
  27. this.hireDate = hireDate;
  28. }
  29. public float getSal(){
  30. return sal;
  31. }
  32. public void setSal(float sal){
  33. this.sal = sal;
  34. }
  35. public String getJob(){
  36. return job;
  37. }
  38. public void setJob(String job){
  39. this.job = job;
  40. }
  41. }

2.DatabaseConnection.java

[java] view plaincopy

  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

[java] view plaincopy

  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

[java] view plaincopy

  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

[java] view plaincopy

  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

[java] view plaincopy

  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

[java] view plaincopy

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

时间: 2024-10-16 22:31:47

JavaBean中DAO设计模式介绍的相关文章

JavaBean在DAO设计模式简介

一.信息系统开发框架 客户层-------显示层-------业务层---------数据层---------数据库 1.客户层:客户层是client,简单的来说就是浏览器. 2.显示层:JSP/Servlet,用于给浏览器显示. 3.业务层:对于数据层的原子操作进行整合. 4.数据层:对于数据库进行的原子操作,添加.删除等: 二.DAO(Data Access Object)介绍 DAO应用在数据层那块,用于訪问数据库,对数据库进行操作的类. 三.DAO设计模式的结构 DAO设计模式一般分为几

23种设计模式介绍以及在Java中的实现

原创不易,转载请注明出处:http://anxpp.com/,谢谢!     文章比较长,读者可以通过顶端的目录选择要了解的模式,然后通过文章右边的按钮快速返回顶部重新选择一个新的模式浏览 博主精心准备了大量的示例代码.文章尽量提供与编程相关的例子,而不是像多数其他介绍的文章一样,提供一些感觉挺滑稽的例子(那样的例子可能看完觉得写得很好,然而还是不会用...). 本文耗费了作者大量时间,还请亲们给个赞O(∩_∩)O~ 也可以通过CTRL+F并输入要了解的模式并跳到对应位置. 文章中的示例源码在g

几种常用的设计模式介绍

几种常用的设计模式介绍                                         1.    设计模式的起源 最早提出“设计模式”概念的是建筑设计大师亚力山大Alexander.在1970年他的<建筑的永恒之道>里描述了投计模式的发现,因为它已经存在了千百年之久,而现代才被通过大量的研究而被发现. 在<建筑的永恒之道>里这样描述:模式是一条由三个部分组成的通用规则:它表示了一个特定环境.一类问题和一个解决方案之间的关系.每一个模式描述了一个不断重复发生的问题,

JavaWeb技术(二):DAO设计模式

1. DAO全称:Data Access Object , 数据访问对象.使用DAO设计模式来封装数据持久化层的所有操作(CRUD),使得数据访问逻辑和业务逻辑分离,实现解耦的目的. 2. 典型的DAO实现组件:DAO接口 + DAO接口的实现类 3. 事例代码 1)javabean组件:用于数据传输的对象 /** javabean数据传输对象 */ public class Customer { // 和数据库中的表是对应的 private int id; private String nam

J2EE之DAO设计模式及简单实现

JAVAEE(Java Enterprise Edition ) 模式 : DAO模式 因此在了解DAO模式之前,我们先来学习一下Java EE的体系结构: (一)JavaEE体系结构 客户端: 客户端层:DHTML(Dynanic HTML:HTML+CSS+JavaScript).JavaApplication(带有main函数的Java程序) 服务器端 web层(接收请求,生成响应):Servlet.JSP 业务逻辑层(编写程序业务处理流程):EJB(企业版JavaBean),例如容器管理

DAO设计模式实现数据库的增删改查(进一步封装JDBC工具类)

一.DAO模式简介 DAO即Data Access Object,数据访问接口.数据访问:故名思义就是与数据库打交道.夹在业务逻辑与数据库资源中间. DAO模式实际上是两个模式的组合,即Data Accessor (数据访问者)模式和 Active Domain Object(领域对象)模式.Data Accessor 模式实现了数据访问和业务逻辑的分离:Active Domain Object 模式实现了业务数据的对象化封装. 需要注意的是,DAO设计模式是Java EE中的设计模式,而非Ja

设计模式介绍

设计模式 设计原则 开闭原则(OCP):对扩展开放,对修改关闭 里氏代换原则(LSP):子类型必须能够替换它们的基类型 依赖倒置原则(DIP):要依赖于抽象,不依赖于具体 接口隔离原则(ISP):每个接口是一种角色,不多不少,不干不该干的事,该干的事都要干 迪米特法则(LoD)[又叫最少知识原则(LKP)]:高内聚低耦合(一个对象对其它对象有尽可能少的了解) 合成/聚合复用原则(CARP):尽量使用合成/聚合,尽量不要使用继承 设计模式的分类 按照目的分: 创建型:(与类和对象的创建有关) 工厂

jsp DAO设计模式

DAO(Data Access Objects)设计模式是属于J2EE体系架构中的数据层的操作. 一.为什么要用DAO? 比较在JSP页面中使用JDBC来连接数据库,这样导致了JSP页面中包含了大量的HTML代码和JSP代码,将显示和功能代码混在一起,难以维护.并且在JSP页面中使用JDBC代码,必须导入相应的"java.sql.*"包.基于使得JSP页面专注于数据的表现的思想,我们只是希望JSP主要负责数据的显示,而不需要关注数据的来源和途径.同时在JSP进行JDBC操作,重复编码太

03_MyBatis基本查询,mapper文件的定义,测试代码的编写,resultMap配置返回值,sql片段配置,select标签标签中的内容介绍,配置使用二级缓存,使用别名的数据类型,条件查询ma

 1 PersonTestMapper.xml中的内容如下: <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!-- namespace:命名空间