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. 写一个函数,输入int型,返回整数逆序后的字符串

    刚刚看到一个面试题:写一个函数,输入int型,返回整数逆序后的字符串.如:输入123,返回"321". 要求必须用递归,不能用全局变量,输入必须是一个參数.必须返回字符串.&quo ...

  2. IOS开发教程--怎样使用点9图片

    事先准备一张图片: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA== ...

  3. Tokyo Tyrant(TTServer)系列(三)-Memcache协议

    通过Memcache协议使用ttserver  通过telnet 127.0.0.1 9032 telnet连接到到启动的实例. 下面我们通过add添加key为key1和value为value1的数据 ...

  4. mysql Access denied for user 'root'@'localhost' (using password: YES)

    [现象说明] C/S程序远程訪问正常,本地訪问报下面异常 MySql.Data.MySqlClient.MySqlException (0x80004005): Authentication to h ...

  5. fontend-githubs

    https://github.com/dypsilon/frontend-dev-bookmarks

  6. comp.lang.javascript FAQ [zz]

    comp.lang.javascript FAQ Version 32.2, Updated 2010-10-08, by Garrett Smith FAQ Notes 1 Meta-FAQ met ...

  7. MySQL官方文档

    http://dev.mysql.com/doc/refman/5.7/en/index.html 没有比这更好的MySQL文档了,省的去买书了

  8. iOS CoreImage图片处理动态渲染(滤镜)

    // //  ViewController.m //  CoreImageOfDong // //  Created by Dong on 15/6/30. //  Copyright (c) 201 ...

  9. bzoj4032: [HEOI2015]最短不公共子串(SAM+DP)

    4032: [HEOI2015]最短不公共子串 题目:传送门 题解: 陈年老题良心%你赛膜爆嘎爷 当初做题...一眼SAM...结果只会两种直接DP的情况... 情况1: 直接设f[i][j] 表示的 ...

  10. 关于QObject类的一些理解

    QRunnable并没有继承自QObject,所以它和其他QObject组件的通信不能使用传统的信号和槽,要是用信号和槽我们必须将其继承自QObject自动的添加 QThread的退出最好用exit( ...