一、信息系统的开发架构

客户层-------显示层-------业务层---------数据层---------数据库

1.客户层:客户层就是client,简单的来说就是浏览器。

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

package org.vo;
import java.util.*;
public class Emp{private int empno;private String ename;private String job;private Date hireDate;private float sal;public Emp(){}public int getEmpno(){return empno;}public void setEmpno(int empno){this.empno = empno;}public String getEname(){return ename;}public void setEname(String ename){this.ename = ename;}public Date getHireDate(){return hireDate;}public void setHireDate(Date hireDate){this.hireDate = hireDate;}public float getSal(){return sal;}public void setSal(float sal){this.sal = sal;}public String getJob(){return job;}public void setJob(String job){this.job = job;}
}

2.DatabaseConnection.java

package org.dbc;
import java.sql.*;
public class DatabaseConnection{private Connection con = null;private static final String DRIVER = "com.mysql.jdbc.Driver";private static final String USER = "root";private static final String URL = "jdbc:mysql://localhost:3306/mldn";private static final String PASS = "12345";public DatabaseConnection()throws Exception{Class.forName(DRIVER);con = DriverManager.getConnection(URL,USER,PASS);}public Connection getConnection()throws Exception{return con;}public void close()throws Exception{if(con!=null){con.close();}}
}

3.IEmpDAO.java

package org.dao;
import java.util.List;
import org.vo.*;
public interface IEmpDAO{public boolean doCreate(Emp emp)throws Exception;public List<Emp> findAll()throws Exception;public Emp findById(int empno)throws Exception;
}

4.EmpDAOImpl.java

package org.dao.impl;
import org.dao.*;
import java.sql.*;
import org.vo.*;
import java.util.*;
public class EmpDAOImpl implements IEmpDAO{private Connection con;private PreparedStatement stat = null;public EmpDAOImpl(Connection con){this.con = con;}public boolean doCreate(Emp emp)throws Exception{String sql = "INSERT INTO emp(empno,ename,job,hiredate,sal) VALUES(?,?,?,?,?)";stat = con.prepareStatement(sql);stat.setInt(1,emp.getEmpno());stat.setString(2,emp.getEname());stat.setString(3,emp.getJob());stat.setDate(4,new java.sql.Date(emp.getHireDate().getTime()));stat.setFloat(5,emp.getSal());int update = stat.executeUpdate();if(update>0){return true;}else{return false;}}public List<Emp> findAll()throws Exception{String sql = "SELECT empno,ename,job,hiredate,sal FROM emp";stat = con.prepareStatement(sql);ResultSet rs = stat.executeQuery();Emp emp = null;List<Emp> list = new ArrayList<Emp>();while(rs.next()){int empno = rs.getInt(1);String ename = rs.getString(2);String job = rs.getString(3);float sal = rs.getFloat(5);emp = new Emp();emp.setEmpno(empno);emp.setEname(ename);emp.setJob(job);emp.setHireDate(rs.getDate(4));emp.setSal(sal);list.add(emp);}return list;}public Emp findById(int empno)throws Exception{String sql = "SELECT empno,ename,job,hiredate,sal FROM emp WHERE empno=?";stat = con.prepareStatement(sql);stat.setInt(1,empno);ResultSet rs = stat.executeQuery();Emp emp = null;if(rs.next()){String ename = rs.getString(2);String job = rs.getString(3);float sal = rs.getFloat(5);emp = new Emp();emp.setEmpno(empno);emp.setEname(ename);emp.setJob(job);emp.setHireDate(rs.getDate(4));emp.setSal(sal);}return emp;}
}


5.EmpDAOProxy.java

package org.dao.impl;
import org.dao.*;
import java.sql.*;
import org.vo.*;
import java.util.*;
import org.dbc.*;
public class EmpDAOProxy implements IEmpDAO{private DatabaseConnection dbc;private IEmpDAO dao = null;public EmpDAOProxy()throws Exception{dbc = new DatabaseConnection();dao = new EmpDAOImpl(dbc.getConnection());}public boolean doCreate(Emp emp)throws Exception{boolean flag = false;if(dao.findById(emp.getEmpno())==null){flag = dao.doCreate(emp);}dbc.close();return flag;}public List<Emp> findAll()throws Exception{List<Emp>list = dao.findAll();dbc.close();return list;}public Emp findById(int empno)throws Exception{Emp emp = dao.findById(empno);dbc.close();return emp;}
}

6.DAOFactory.java

package org.dao.factory;
import org.dao.*;
import java.sql.*;
import org.vo.*;
import java.util.*;
import org.dbc.*;
import org.dao.impl.*;
public class DAOFactory{public static IEmpDAO getInstance(){IEmpDAO dao = null;try{dao = new EmpDAOProxy();   }catch(Exception e){e.printStackTrace();}return dao;}
}

7.TestDAO.java

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

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

JavaBean中DAO设计模式介绍相关推荐

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

    本文章出自:blog.csdn.net/anxpp/artic- 若要查看原文请点击 文章中的示例源码在github上:github.com/anxpp/JavaD- 由于CSDN上的下拉翻页比较麻烦 ...

  2. Dao设计模式(Data Access Object)

    目    录(本篇字数:1858) 介绍 通用Dao 一.Dao泛型接口 二.JavaBean 三.Dao接口实现类 四.单元测试 五.反射工具类 介绍 Dao设计模式(Data Access Obj ...

  3. Java 分层设计(DAO设计模式)

    此文章是本人学习mldn魔乐科技DAO设计模式教学视频后,总结下来,用于复习使用,在这里感谢mldn的学习视频. DAO设计模式? DAO全称是(Data Access Object,数据库访问对象) ...

  4. JDBC编程和DAO设计模式

    在JDBC编程中,一种常用的设计模式为DAO设计模式,DAO的全称为 Data Access Object 数据访问对象. DAO设计模式有两个要点: 1.分层,将底层数据逻辑和高层的业务逻辑分层,实 ...

  5. DAO设计模式(转)

    J2EE开发人员使用数据访问对象(DAO)设计模式把底层的数据访问逻辑和高层的商务逻辑分开.实现DAO模式能够更加专注于编写数据访问代码. 我们先来回顾一下DAO设计模式和数据访问对象. DAO基础 ...

  6. POJO、JavaBean、DAO

    POJO   POJO全称是Plain Ordinary Java Object / Plain Old Java Object,中文可以翻译成:普通Java类,具有一部分getter/setter方 ...

  7. MySQL数据库学习笔记(十一)----DAO设计模式实现数据库的增删改查(进一步封装JDBC工具类)...

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  8. 单例设计模式介绍||单例设计模式八种方式——1) 饿汉式(静态常量) 2) 饿汉式(静态代码块) 3) 懒汉式(线程不安全) 4) 懒汉式(线程安全,同步方法)

    单例模式 单例设计模式介绍 所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法(静态方法). 比如Hibernate的 ...

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

     1 PersonTestMapper.xml中的内容如下: <?xmlversion="1.0"encoding="UTF-8"?> < ...

最新文章

  1. 练习2:课工场响应式导航条_作业帮直播课APP下载最新版入口
  2. 万字长文带你全面认识 Kubernetes 中如何实现蓝绿部署、金丝雀发布和滚动更新...
  3. python网课推荐 知乎-知乎看了很多推荐,最终选了这本Python入门
  4. mysql.sock的作用
  5. linux diff(differential) 命令
  6. python rpc框架-python使用rpc框架gRPC的方法
  7. 如何提高工作效率,拥有自由支配时间?
  8. Spring Boot中使用Spring-data-jpa让数据访问更简单、更优雅
  9. 苹果CMS音乐猪自适应网站模板
  10. 解决bert在文本长度的问题的方案,篇章级
  11. 苹果被拒:Guideline 2.3.10 - Performance - Accurate Metadata
  12. Ubuntu20.04中的Firefox缺少Flash插件无法播放视频
  13. ZK宕机重启数据恢复
  14. Vue项目中完成谷歌统计和百度统计功能
  15. 香橙派借助语音模块实现语音刷抖音
  16. Unity_播放音乐
  17. 如何欺骗神经网络,让它把熊猫识别为秃鹫
  18. 科技新品 | 富士胶片研发出全球最大容量数据流磁带;iGame发布内存新品“古德白”...
  19. 求 一个 quality center explorer 9.0的 百度网盘 或是别的下载地址的链接
  20. 二建和一建的考试教材一样吗

热门文章

  1. [文档].Altera – SOPC Builder组件开发攻略
  2. 牛客第七场 Sudoku Subrectangles
  3. SQL Server查询备份日期和备份设备名
  4. 实现在GET请求下调用WCF服务时传递对象(复合类型)参数
  5. 情境感知技术是什么?
  6. proc文件系统探索 之 根目录下的文件[三]
  7. 重写了博客上的代码着色脚本
  8. Tomcat 的数据库连接池设置与应用
  9. 顽强的病毒,如何处理
  10. 技术开发频道一周精选2007-8-24