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. [Tailwind] Get started with Tailwindcss

    In this lesson, we learn how to generate CSS utility classes from Tailwind's JavaScript config file. ...

  2. 树莓派与window 10组成的物联网核心:让人失望

    去年春天,微软公布了自己的window系统与物联网系统的方案,该方案使用树莓派和window 10组成物联网的核心.树莓派是一个与window全然不同的执行在ARM构架下的系统. 是的,也许微软决心离 ...

  3. Apache + Tomcat 负载均衡 session复制

    转自:http://blog.csdn.net/cssmhyl/article/details/8455400 http://snowolf.iteye.com/blog/743611 Apache  ...

  4. 小P寻宝记——好基友一起走

    小P寻宝记--好基友一起走 Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^ 题目描写叙述 话说.上次小P到伊利哇呀国旅行得到了一批宝藏.他是 ...

  5. Deming管理系列(1)——开车仅仅看后视镜

    问题: 当业务经理被要求为未来的业务做计划时,他会提出一个自觉得不错的数字,而董事会往往希望能获得更大的收益,多次与其谈判.而业务经理在这方面不是新手,他有非常多可用的报告. 为什么不能让业务规划流程 ...

  6. java里面包的重要性-管理类文件

    包的必要性 包是用来给java源文件分门别类的,java中一个包在windows下就是一个文件夹.包的全限定名是从根文件夹開始的(\src文件夹)以点号作为分隔符,包名和包名之间使用点号隔开,java ...

  7. Ubuntu(64位)编译Android源码常见错误解决办法

    2013年07月10日 14:47:27 阅读数:1239 错误: /usr/include/gnu/stubs.h:7:27: error: gnu/stubs-32.h: No such file ...

  8. sql server 数据库展开变慢

    https://social.msdn.microsoft.com/Forums/sqlserver/en-US/99bbcb47-d4b5-4ec0-9e91-b1a23a655844/ssms-2 ...

  9. isual Studio 2013编译ImageMagick---转

    “该文引用自 CruiseYoung的:Visual Studio 2013编译ImageMagick http://blog.csdn.net/fksec/article/details/36008 ...

  10. ML学习笔记- 神经网络

    神经网络 有的模型可以有多种算法.而有的算法可能可用于多种模型.在神经网络中,对外部环境提供的模式样本进行学习训练,并能存储这种模式,则称为感知器;对外部环境有适应能力,能自动提取外部环境变化特征,则 ...