一、信息系统的开发架构

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

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   VO类

  1. [java] view plaincopy
  2.  
  3. package org.vo;
  4. import java.util.*;
  5. public class Emp{
  6. private int empno;
  7. private String ename;
  8. private String job;
  9. private Date hireDate;
  10. private float sal;
  11. public Emp(){
  12.  
  13. }
  14. public int getEmpno(){
  15. return empno;
  16. }
  17. public void setEmpno(int empno){
  18. this.empno = empno;
  19. }
  20. public String getEname(){
  21. return ename;
  22. }
  23. public void setEname(String ename){
  24. this.ename = ename;
  25. }
  26. public Date getHireDate(){
  27. return hireDate;
  28. }
  29. public void setHireDate(Date hireDate){
  30. this.hireDate = hireDate;
  31. }
  32. public float getSal(){
  33. return sal;
  34. }
  35. public void setSal(float sal){
  36. this.sal = sal;
  37. }
  38. public String getJob(){
  39. return job;
  40. }
  41. public void setJob(String job){
  42. this.job = job;
  43. }
  44. }

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   dao接口

  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

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

JavaBean中DAO设计模式简介的更多相关文章

  1. JavaBean中DAO设计模式介绍(转)

    一.信息系统的开发架构 客户层-------显示层-------业务层---------数据层---------数据库 1.客户层:客户层就是客户端,简单的来说就是浏览器. 2.显示层:JSP/Ser ...

  2. JavaBean中DAO设计模式介绍

    一.信息系统的开发架构 客户层-------显示层-------业务层---------数据层---------数据库 1.客户层:客户层就是client,简单的来说就是浏览器. 2.显示层:JSP/ ...

  3. JavaBean在DAO设计模式简介

    一.信息系统开发框架 客户层-------显示层-------业务层---------数据层---------数据库 1.客户层:客户层是client,简单的来说就是浏览器. 2.显示层:JSP/Se ...

  4. Java Web开发中MVC设计模式简介

    一.有关Java Web与MVC设计模式 学习过基本Java Web开发的人都已经了解了如何编写基本的Servlet,如何编写jsp及如何更新浏览器中显示的内容.但是我们之前自己编写的应用一般存在无条 ...

  5. DAO设计模式

    DAO设计模式 DAO设计模式简介: DAO设计模式可以减少代码量,增强程序的可移植性,提高代码的可读性. DAO(数据库操作对象)设计模式是 JavaEE 数据层的操作.主要由五部分组成: 1.数据 ...

  6. 一、DAO设计模式 二、DAO设计模式的优化 三、JDBC中的事务,连接池的使用

    一.DAO设计模式概述###<1>概念 DAO,Data Access Object ,用于访问数据库的对象. 位于业务逻辑和数据持久化层之间,实现对数据持久化层的访问![](1.png) ...

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

    1. DAO全称:Data Access Object , 数据访问对象.使用DAO设计模式来封装数据持久化层的所有操作(CRUD),使得数据访问逻辑和业务逻辑分离,实现解耦的目的. 2. 典型的DA ...

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

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

  9. DAO设计模式 -- 使用数据库连接类连接MySql数据库并实现添加用户

    1. DAO简介    DAO设计模式是属于J2EE数据库层的操作,使用DAO设计模式可以简化大量代码,增强程序的可移植性. 2. DAO各部分详解    DAO设计模式包括5个重要的部分,分别为数据 ...

随机推荐

  1. 关于如何去Apple.cn下载Xcode以及模拟器包

    前言:对于一个懒惰的iOS开发,Xcode的更新我是迟迟没有去下载.有人或许会说:你并不是一个合格的iOS开发者! T3T 我承认自己缺少拓新精神,Apple的尿性是:坑死第一批体验者不偿命~表示本人 ...

  2. 大数据学习--day09(this、static)

    this.static this 关键字 类不可以定义 this 属性 ,  但是每个类都有一个 隐藏起来的 this 属性  . 每个对象被创建了 , 都会给其属性分配空间  , 也会给 this  ...

  3. Spring Cloud之 Config Server 使用ip端口号配置高可用

    先看官方文档的配置 --- spring: profiles: peer1 eureka: instance: hostname: peer1 client: serviceUrl: defaultZ ...

  4. Python(ATM机low版)

    import osclass ATM: @staticmethod def regst(): while 1: nm = input('请输入你的名字:') mm = input('请输入你的密码:' ...

  5. Python学习:9.模块的安装以及调用模块

    什么是模块 在Python中,模块其实也就是包含python代码的文件,我们为什么要使用模块?在我们以后写代码的时候,我们会发现有很多功能需要经常使用,那我们想要使用这些功能怎么办,要再把那些代码在敲 ...

  6. Dijkstra算法堆优化(vector建图)

    #include<iostream> #include<algorithm> #include<string.h> #include<stdio.h> ...

  7. 成都Uber优步司机奖励政策(2月28日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  8. 天津Uber优步司机奖励政策(12月14日到12月20日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  9. 【LG2495】[SDOI2011]消耗战

    [LG2495][SDOI2011]消耗战 题面 洛谷 题解 参考博客 题意 给你\(n\)个点的一棵树 \(m\)个询问,每个询问给出\(k\)个点 求将这\(k\)个点与\(1\)号点断掉的最小代 ...

  10. 相机imu外参标定

    1. 第一步初始化imu外参(可以从参数文档中读取,也可以计算出),VINS中处理如下: # Extrinsic parameter between IMU and Camera. estimate_ ...