JAVAEE(Java Enterprise Edition ) 模式 : DAO模式
因此在了解DAO模式之前,我们先来学习一下Java EE的体系结构:
(一)JavaEE体系结构

客户端

  • 客户端层:DHTML(Dynanic
    HTML:HTML+CSS+JavaScript)、JavaApplication(带有main函数的Java程序)

服务器端

  • web层(接收请求,生成响应):Servlet、JSP

  • 业务逻辑层(编写程序业务处理流程):EJB(企业版JavaBean),例如容器管理,线程并发等都包含其中,因此体积庞大,使用复杂,中小型软件不使用

  • 持久层(数据库的增删改查)(数据访问层):Java访问数据库依赖于JDBC接口规范

上述JavaEE体系构成,规范了一个Java程序的构成。因此,假如要设计一款Java
EE的软件就需要遵循上面的结构。即我想做一个功能,按照这套结构,从客户端开始,应该写4个程序(如上图所示)。

Struts:实现Servlet与JSP的传统功能

Spring:管理JavaBean的状态

Hibernate:完成数据库的增删改查

实际上,做一套软件,使用Servlet+JSP+JavaBean+JDBC完全可以完成,SSH是对传统开发方式的一个封装,可以在SSH框架的基础上继续进行开发,相对于从Servlet和JSP一点点进行开发,可以大大降低开发的复杂度。

服务器端三层也被称为经典三层结构,即web层(表现层),业务逻辑层,数据持久层,出现了很多结合三层JavaEE的设计模式,DAO模式就是数据持久层的设计模式

MVC 和 JavaEE经典三层结构的比较
实际上MVC 和
JavaEE经典三层结构是由两拨人分别提出的,两者间可以有着如下的对应:

  • 三层结构中业务层、数据持久层 —- Model
  • 三层结构中web层 JSP —- View
  • 三层结构中web层 Servlet —- Controller

(二)DAO(Data Access Object 数据访问对象)设计模式

1、DAO模式的功能:

  • 封装对于数据源的操作,数据源可能是文件、数据库等任意存储方式(可以与数据库或者文件进行交互,业务层在去操作数据层时,不需要知道数据层底层的存储实现)
  • 负责管理与数据源的连接
  • 负责数据的存取(CRUD)

其原理可以用如下图进行解释:

DAO模式更通俗的来说,数据层用DAO完全封装了数据源底层实现(相互间传递的是对象,不需要知道其具体实现),提供了增删改查功能;业务层如果操作数据源采用对象的方式,就是说业务层要存一个User的数据,只需要将User数据交给DAO层(数据层),DAO会将数据存到数据库或者文件当中,想查询,即返回一个对象即可。即业务层和数据层进行通信传递的都是对象就是DAO模式好处是业务层开发人员不需要会表写SQL,只要将对象封装好传给数据层即可,少儿英语培训教材通过对象操作完成对数据源增删改查。(使业务层和数据层分离)。

2、DAO模式的构成

DAO模式的构成可以通过如下图进行讲解:

  • Business Object :代表数据的使用者 (业务层程序)
  • DataAccessObject :抽象并封装了对底层数据源的操作 (数据层程序)
  • DataSource 数据源 — mysql数据库
  • TransferObject 表示数据的Java Bean

BussinessObject 通过 将transferObject 传递 DataAccessObject 完成对DataSource的增删改查

(三)用DAO模式重写对users表增删改查 (业务层传递一个对象到数据层完成数据库的增删改查)

业务层通过对象的操作,完成对数据源增删改查

DAO模式,将增删改查sql封装起来,方法参数和返回值都是对象,业务层通过操作这些对象,完成对数据库增删改查

接下来我们来写一个DAO模式的实例:
按照DAO模式的结构,我们创建4个package:

其中cn.megustas.service代表业务层BusinessObject,代表使用者;cn.megustas.dao代表DataAccessObject,封装了对源数据的增删改查操作,返回对象;cn.megustas.domain代表TransferObject,其中是表示数据的JavaBean;cn.megustas.jdbc是将常用的数据库连接等语句封装于Untils,方便直接调用使用。

假设在database中已经存在如下的table:

TransferObject:

*小技巧:对于JavaBean中的get/set方法的生成,可以选中成员变量,右键-Source-Generate Getters and
Setters

JDBCUtils:

DataAccessObject:

*注意,(1)一定要在try{}catch{}后使用finally进行资源释放(2)sql中字符串需要使用‘’

BusinessObject:

可以发现,业务层进行数据的增删改查,无需写SQL语句,只需创建对应的对象,调用数据层(DataAccessObject)方法就可以实现(也就是说在实际工程中可以将业务进行分工,业务层的操作人员可以不必会SQL等相关操作也可以进行数据库的增删改查)

具体代码完整下载可以去Git:https://coding.net/u/TwistFate/p/DaoTest/git

J2EE之DAO设计模式及简单实现的更多相关文章

  1. 简单的Dao设计模式

    简单的DAO设计模式 这两天学习到了DAO(Data Access Object 数据存取对象)设计模式.想谈谈自己的感受,刚开始接触是感觉有点难,觉得自己逻辑理不清,主要是以前学的知识比较零散没有很 ...

  2. Dao设计模式简单实现

    一.什么是Dao设计模式 Dao设计模式封装了操作具体数据库的细节,对业务层提供操作数据库的接口,因此降低了业务层代码与具体数据库之间的耦合,有利于人员分工,增加了程序的可移植性. Dao设计模式中主 ...

  3. DAO设计模式(转)

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

  4. Java Dao设计模式

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

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

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

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

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

  7. jsp DAO设计模式

    DAO(Data Access Objects)设计模式是属于J2EE体系架构中的数据层的操作. 一.为什么要用DAO? 比较在JSP页面中使用JDBC来连接数据库,这样导致了JSP页面中包含了大量的 ...

  8. JavaBean在DAO设计模式简介

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

  9. JavaBean中DAO设计模式介绍

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

随机推荐

  1. windows上传本地项目Github远程仓库(另附设置git网页链接)

    一:关于Windows平台安装git以及github的注册不在详细描述,可以参考如下经验: 安装教程:https://jingyan.baidu.com/article/925f8cb8a8e91cc ...

  2. 快速上手pandas(下)

      和上文一样,先导入后面会频繁使用到的模块: In [1]: import numpy as np import pandas as pd import matplotlib.pyplot as p ...

  3. Maven项目思考&实战

    参考了网络上很多文章, 特此感谢. Maven项目规范 同一项目中所有模块版本保持一致 子模块统一继承父模块的版本 统一在顶层模块Pom的节中定义所有子模块的依赖版本号,子模块中添加依赖时不要添加版本 ...

  4. 7年老Android收到阿里offer,跟领导提离职被怼:为年薪百万不做兄弟?

    在当今社会,钱就是衡量一个人价值的标准,如果你在一家公司,领导再怎么重用你,但是薪资待遇却很低,这样根本是很难留住人,毕竟工作就是为了赚钱,要是连工资都满足不了,谈其他根本就是扯淡. 最近在职业论坛看 ...

  5. Android:Camera2的简单使用

    以前用的是Camera,但是现在Camera已经被官方弃用了,所以这里使用的是Camera2进行演示 使用Camera需要注意的就是权限的获取,必须有权限 类图介绍 Camera2跟Camera1不一 ...

  6. Notes about WindowPadX

    WindowPadX乃一Autohotkey脚本,具有强大的单/多显示器窗口排布能力且易于配置.有了它,那些Pro版收费的.需要安装的DisplayFusion, MultiMon TaskBar, ...

  7. C语言中的stdin,stdout,stderr[转]

    我们在写C程序时经常遇到printf(),fprintf(),perror(),这些东西到底有什么作用.说到这不得不提及stdin,stdout,stderr.想想,我们在用C去写文件时的操作,Fil ...

  8. Shell-13-常用文件目录

    linux系统目录结构 环境变量文件 系统级 系统级变量文件对所有用户生效 #系统范围内的环境变量和启动文件. #不建议把要做的事情写在这里面,最好创建一个自定义的,放在/etc/profile.d ...

  9. 加载GIF图片优化方案

    前言 许多项目需要加载GIF图片,但是在直接使用UIImageView加载存在许多问题,于是查找资料做了一个加载GIF的Demo,思路来源. 思路 使用FLAnimatedImage来加载GIF图片, ...

  10. Blind SQL injection:盲注详解

    什么是盲注? 当应用程序易受SQL注入攻击,但其HTTP响应不包含相关SQL查询的结果或任何数据库错误的详细信息时,就会出现盲SQL注入. 对于盲目SQL注入漏洞,许多技术(如联合攻击)都是无效的,因 ...