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

最新文章

  1. B:Wordpress不同分类调用不同的模板
  2. CoreData基础
  3. 使用dSYM分析App崩溃日志
  4. Jquery + echarts 使用
  5. Spring 4.0 StandaloneMockMvcBuilder java.lang.NoClassDefFoundError: javax/servlet/SessionCookieConfig 问题解决
  6. mssql定时执行作业。
  7. HTML标签区别
  8. eclipse3.7 安装maven插件与scm
  9. boost vc编译
  10. lepus监控OS配置
  11. HDU 2167 Pebbles(状压DP)
  12. 命令行更新node和npm
  13. 在阿里云服务器中用IP连接SQLserver2014提示40,53错误
  14. ansible的plugins
  15. python学习---装饰器
  16. 关于Ajax异步请求(实时刷新)
  17. python之获取当前操作系统(平台)
  18. ckeditor5 安装高亮,颜色插件
  19. python中的re模块——正则表达式
  20. 利用trie树实现前缀输入提示及trie的python实现

热门文章

  1. 查看python中所有的关键字
  2. js 数据存入数组
  3. 使用策略者模式减少switch case 语句
  4. gitlab维护之修改clone地址
  5. ArrayList 源码底层实现解析 基于1.8
  6. LaTex公式语法教程及手册(附emlogpro公式显示插件katex说明)
  7. HCNA Routing&Switching之DHCP服务
  8. 用于在公网环境下测试的Telnet/SSH服务器
  9. 某次无中生有的getshell过程
  10. SpringCloud升级之路2020.0.x版-19.Eureka的服务端设计与配置