DAO

Data Access Object(数据訪问接口)

一、场景和问题

在Java程序中。常常须要把数据持久化,也须要获取持久化的数据。可是在进行数据持久化的过程中面临诸多问题(如:数据源

不同、存储类型不同、供应商不同、訪问方式不同等等),请问怎样能以统一的接口进行数据持久化的操作?

二、解决方式

看懂这个图,DAO理解的也差点儿相同了。

(因为语文水平的能力啊,等我好好整理一下思路。在更新啊)

三、DAO的理解

DAO在三层结构模式中起来非常大的作用,表现层通过逻辑层调用DAO,然后让DAO去调用数据层。这样非常好的将数据层和其它两层隔离开,安全性和可维护性更高。然后在逻辑层和DAO层有能够建立新的DAO2,这个DAO2的作用就是避免外界直接接触里面的接口,主要通过工厂方法,实现接口的应用,这种目的也是为了提高安全性,并且显得更层次感。

1、DAO事实上是利用组合工厂模式来解决这个问题的,并没有带来新的功能,所以学的事实上就是个思路。

2、DAO理论上是没有层数限制的。

3、DAO的各层理论上是没有先后的。

四、DAO设计模式的结构

DAO设计模式一般分为:

1、值对象模式 (传递參数与返回值)

VO(Value Object):就是存放项目中的一些要对其操作的数据类。

2、DAO模式

DAO接口:用于声明对于数据的操作的方法。

3、面向接口编程 (分层、封装隔离)

DAOImpl:必须实现DAO接口,真实实现DAO接口的函数,仅仅是单纯的处理数据。

4、工厂模式

DAOFactory:工厂类。含有getInstance()创建一个DAOImpl类。

五、DAO模式的本质

一层屏蔽一种变化

六、DAO的优点

DAO的优点就是提供给用户的接口仅仅有DAO的接口。所以假设用户想加入数据,仅仅须要调用create函数就可以。不须要数据库的操作

常见设计模式的应用

一、面向接口编程

1、面向接口编程是第一大原则。

2、在Java程序设计里面。很讲究层的划分和模块的划分。

通常我们依照三层来划分程序。分别UI层、逻辑层(取名business或service)、数据存储层,他们之间都要通过接口来通讯。

3、在每个层里面。又有非常多外小模块,一个小模块对外也应该是一个总体。那么一个模块对外也应该提供接口,其它地方须要使用到这个模块的功能。都应该通过此接口。

二、接口定义中的參数和返回值

问题:接口里面一定会定义接口隔离体部分须要暴露的方法。对于方法就有參数和返回值的定义,究竟须要在接口中怎样描写叙述须要传递的參数呢?

答案:值对象模式给了我们非常好的解决方式。其实,值对象已经成为了不同层或是不同模块之间数据交换的标准方法。它体现的是数据的封装。也利于对象的复用。

三、编程中。外部怎样得到接口

问题:1、我们知道。在Java程序中,使用一个类要先通过new的操作,得到一个类的实例。然后通过这个类实例去调用类的属性和方法。

2、但是接口呢,我们怎么得到它的实例呢?要知道接口是不能直接new操作的,我们之前学过的方式是:Interface inf = new 实现类();

3、可是在面向接口编程的世界里,假设这样做,意味着client必须知道你详细的实现类。这破坏了接口的隔离性。使用接口就是不让外部知道隔离体内部的实现的。怎么办呢?

答案:前面的工厂模式给出了这个问题的解决方式,使用Factory来“生产”接口。对外只提供工厂和接口。

四、内部实现中怎样进行数据存储操作

问题:前面已经学会了怎样设计一个模块对外公开的部分,那么。在内部实现的时候,遇到须要数据存储的时候,我们应该怎么操作呢?

答案:对于这个问题,DAO模式给出了较好的解决方式。

(详细操作看实例-----书店管理系统)

总结

一、Java 程序设计--包结构

Java程序设计的系统体系结构非常大一部分都体如今包结构上

一种典型的Java应用程序的包结构:前缀.应用或项目的名称.模块组合.模块内部的技术实现

1、前缀:是站点域名的倒写,去掉www(如,Sun公司(非JDK级别)的东西:com.sun.* )。

2、当中模块组合又由系统、子系统、模块、组件等构成(详细情况依据项目的大小而定,假设项目非常大。那么就多分几层。

3、模块内部的技术实现一般由:表现层、逻辑层、数据层等构成。

对于很多类都要使用的公共模块或公共类,能够再独立建立一个包,取名common或base,把这些公共类都放在当中。

对于功能上的公用模块或公共类可建立util或tool包,放入当中。

二、设计与实现的经常使用方式、DAO的基本功能

1、 设计的时候:从大到小

先把一个大问题分解成一系列的小问题。或者说是把一个大系统分解成多个小系统,小系统再继续进行往下分解,直到分解到自己可以掌控时。再进行动手实现。

实现的时候:从小到大

先实现组件,进行測试通过了。再把几个组件实现合成模块。进行測试通过。然后继续往上扩大。

2、 最典型的DAO接口通常具有的功能

新增功能、改动功能、删除功能、依照基本的键值进行查询、获取全部值的功能、依照条件进行查询的功能。

3、 一个通用DAO接口模板

4、 UserVO 和 UserQueryVO的差别

UserVO封装数据记录。而UserQueryVO用于封装查询条件

java之 ------ DAO设计模式的【具体解释】及常见设计模式的【应用】的更多相关文章

  1. JavaScript 中常见设计模式整理

    开发中,我们或多或少地接触了设计模式,但是很多时候不知道自己使用了哪种设计模式或者说该使用何种设计模式.本文意在梳理常见设计模式的特点,从而对它们有比较清晰的认知. JavaScript 中常见设计模 ...

  2. Java的DAO设计模式

    用java的DAO模式实现对一个学生实体的增加,查询操作. 1.建立一个学生实体类 Student.java public class Student { private String sid; pr ...

  3. java中dao层和service层的区别是什么?

    首先解释面上意思,service是业务层,dao是数据访问层.呵呵,这个问题我曾经也有过,记得以前刚学编程的时候,都是在service里直接调用dao,service里面就new一个dao类对象,调用 ...

  4. java中dao层和service层的区别是什么

    dao层中已经有操作数据库的方法了,为什么还要service层去封装?有什么好处? tanghui12321 | 浏览 131990 次  我有更好的答案  推荐于2017-10-06 18:44:5 ...

  5. BATJ高级Java面试题分享:JVM+Redis+Kafka +数据库+设计模式

    话不多说,直接上面试题,来看一下你还欠缺多少? Mysql 与 Oracle 相比, Mysql 有什么优势? 简洁描述 Mysql 中 InnoDB 支持的四种事务隔离级别名称,以及逐级之间的区别? ...

  6. Spring-mybatis没有了XXXmapper.java和Dao的实现类还有Service的实现类

    对于刚学过框架的同学可能知道,mybatis有两种主要的配置文件: SqlMapConfig.xml(mybatis全局配置文件,名称不固定,用来配置运行环境(数据源.事务) XXXmapper.xm ...

  7. JAVA之旅(二十六)——装饰设计模式,继承和装饰的区别,LineNumberReader,自定义LineNumberReader,字节流读取操作,I/O复制图片

    JAVA之旅(二十六)--装饰设计模式,继承和装饰的区别,LineNumberReader,自定义LineNumberReader,字节流读取操作,I/O复制图片 一.装饰设计模式 其实我们自定义re ...

  8. Java进阶(十五)Java中设置session的详细解释

    Java中设置session的详细解释 简单通俗的讲session就是象一个临时的容器,用来存放临时的东西.从你登陆开始就保存在session里,当然你可以自己设置它的有效时间和页面,举个简单的例子: ...

  9. 初探Java设计模式4:JDK中的设计模式

    JDK中设计模式 本文主要是归纳了JDK中所包含的设计模式,包括作用和其设计类图.首先来个总结,具体的某个模式可以一个一个慢慢写,希望能对研究JDK和设计模式有所帮助.一.设计模式是什么(1)反复出现 ...

随机推荐

  1. 《Javascript权威指南》学习笔记之十五:BOM之源---window对象

    BOM是Browser Object Model的缩写,即浏览器对象模型,提供了独立于网页内容和浏览器窗体之间进行交互的APi.API由若干对象组成,因为浏览器是Javascript的宿主,因此,这些 ...

  2. 17 facade

    客户不须要内部的实现,仅仅须要知道有这个功能就好了,(最少知识原则)

  3. HDU TIANKENG’s rice shop(模拟)

    HDU 4884 TIANKENG's rice shop 题目链接 题意:模拟题.转一篇题意 思路:就模拟就可以.注意每次炒完之后就能够接单 代码: #include <cstdio> ...

  4. @Autowired 凝视遇到的问题,@Qualifier 帮助解决这个问题

    当候选 Bean 数目不为 1 时的应对方法 在默认情况下使用 @Autowired 凝视进行自己主动注入时,Spring 容器中匹配的候选 Bean 数目必须有且仅有一个. 当找不到一个匹配的 Be ...

  5. EMC存储划分lun过程

    下图是EMC存储系统示意图: 若将lun打散重建,需按以下步骤进行: 1. 在Storage Groups上点右键选择Select Luns,在打开的窗口中,将右边Selected Lun项下的lun ...

  6. C#读出文本文件内容,遍历数组筛选出 含有汉字对应的拼音字符

    情景描述:由于任务需要,现有一用户表数据,用户名 字段 在新增用户时,输入中文和拼音两种,先要区分同时含有中文和拼音字母的用户名.由于数据很多,可以通过一段代码完成查询: 前提:在阅读本文之前可以先了 ...

  7. Git 学习笔记(三)

    我记得最初学习的时候我提到了使用版本控制软件的最大好处是让你可以永远后悔,那么如何吃后悔药呢?在项目过程中我们很有可能因为各种因素对我们的操作进行回滚,对于传统的版本控制系统来说,并不复杂,拿 SVN ...

  8. Hessian实例

    简述Hessian Hessian是一个由Caucho Technology开发的轻量级RPC框架,由于它使用二进制RPC协议,所以它更快.更简单,很适合于发送二进制数据(访问官网): 在进行基于He ...

  9. Asp.Net Core部署到Linux服务器

    从2016年7月, .NET Core1.0 正式发布开始,由于时间问题,我没怎么关注过.NET Core,最近刚抽出点时间研究了下,先讲下如何把ASP.NET Core部署到Linux上吧.这里我用 ...

  10. 关于C语言变量声明在其他语句后的一些细节

    今天一个同学来找我,说他的代码老是编译不通过,我看了半天,好像都很符合逻辑,但一直显示一个变量未定义,我就纳闷了,代码类似如下: int main(){ login(); int id; scanf( ...