第八章:DAO模式

8.1:JDBC封装

为了提高代码的维护性和扩展性,我们使用JDBC进行封装数据,

先定义统一的API,将操作数据的代码抽象到接口中,业务逻辑代码只需要调用这些接口的实现类的对象,就可以实现对数据的访问了,从而隔离实现的细节,采用面向接口编程,可以降低代码间的耦合度,提高代码的扩展性和维护性。

DAO(data  access  Objects) 数据存取对象,位于业务逻辑和持久化之间,实现对持久化数据的访问,通俗的讲,就是将数据操作封装起来,对外提供相应的接口

在面向对象设计过程中,有一些套路用户解决问题,称为模式,DAO模式提供了访问关系型数据系统所需操作的接口,将数据访问和业务逻辑分开,对上层提供面向对象的数据访问接口,

从DAO模式可以看出,它实现了两层分离。

l  隔离了数据访问代码和业务逻辑代码,业务逻辑代码直接调用DAO方法即可,完全感觉不到数据表的存在,分工明确,数据访问层代码不影响业务逻辑层代码,这也符合单一职能原则,降低了耦合度,提高了代码的可复用性。。

l  隔离了不同的数据库的实现,采用面向接口编程,如果底层数据变化了,如mysql变成了oracle。中需要增加DAO接口的实现类即可,原来的Mysql实现类不用修改,这符合开闭原则,降低耦合性,提高扩展性和移植性

一个典型的DAO模式主要由以下几部分组成。

DAO接口:把对数据库的所有操作定义为抽象方法,放在接口里面,可以提供多种实现

DAO实现类:针对不同的数据库给出不同的DAO接口定义的方法的实现(不同的实现类)

实体类:用于存放传送的对象数据,就直接传递对象就行了,不用传递很多参数

数据库连接关闭工具类:还有一些比如增,删,改的复用代码可以提取到公共类中,还有关闭和连接数据库,避免代码冗余。。。

8.2:Prpoerties类

可以读取java配置文件的类,我们把常用的配置信息写在配置文件中,方便维护,读取。

8.2.1:Properties配置文件

Java配置文件一般是properties结尾的。格式是键=值对的,可以用#来注释,

SRC右键-----NEW -----File-----输出properties结尾的配置文件。

在文件中添加配置信息。例如

Driver=com.mysql.jdbc.Driver                   //添加加载驱动的字符串

Url=jdbc:mysql://localhost:3306/epet           //添加链接的字符串,localhost也可以为IP地址,3306为端口号,epet是数据库名称

Username=epetAdmin                         //数据库用户名

Password=root                             //数据库用户密码

8.2.2:读取配置文件

Properties类位于Java.util包中

方法

描述

String getProperty(String key)

用指定的键获得值,

Object setProperties(String key,String value)

调用hashTable的put方法,通过调用基类的put() 方法设置键值对。

Void  load(InputStream instr)

从输入流中读取属性列表,通过对指定的文件进行装载获取文件的键值对

Void clear()

清除所转载的键值对,改方法是hashtable提供的

例子:

private static String driver;

private static String url;

private static String user;

private static  String password;

public Connection conn=null;   //连接对象

/**

* 静态代码块

*/

static {

init();

}

/**

* 初始化连接参数,从配置文件读取

*/

public static void init() {

//创建配置

Properties params=new Properties();

String configFile="database.properties";  //路径

//加载配置问件到输入流

InputStream is=BaseDao.class.getClassLoader().getResourceAsStream(configFile);

try {

//重输入流中读取属性列表

params.load(is);

} catch (IOException e) {

System.out.println(e.getMessage());

}

//根据指定的获取对应的值

driver=params.getProperty("driver");

url=params.getProperty("url");

user=params.getProperty("username");

password=params.getProperty("password");

}

8.3:使用实体类传递数据

数据访问代码和业务逻辑代码之间通过实体类类传输数据,把相关的信息封装到实体;类中,程序把实体类作为方法的参数来传递。

8.3.1:实体类的特征

实体类一般属性使用private修饰

根据业务需求和封装性要求对实体类进行getter/setter方法,负责属性的读取和赋值,一般使用public修饰

对实体类提供无参的构造函数,根据业务需求提供有参数的构造方法。

实体类最好实现java.io.Serializable接口,支持序列化机制,可以将改对象转化为字节序列化而保存到磁盘(硬盘)或者网络上传输。

如果实体类实现了serializable接口。就应该定义属性serialVersionUID,解决不同版本的序列化问题。。。

java数据库编程之DAO模式的更多相关文章

  1. Java并发编程之CAS

    CAS(Compare and swap)比较和替换是设计并发算法时用到的一种技术.简单来说,比较和替换是使用一个期望值和一个变量的当前值进行比较,如果当前变量的值与我们期望的值相等,就使用一个新值替 ...

  2. Java并发编程之CAS第一篇-什么是CAS

    Java并发编程之CAS第一篇-什么是CAS 通过前面几篇的学习,我们对并发编程两个高频知识点了解了其中的一个—volatitl.从这一篇文章开始,我们将要学习另一个知识点—CAS.本篇是<凯哥 ...

  3. Java网络编程之TCP、UDP

    Java网络编程之TCP.UDP 2014-11-25 15:23 513人阅读 评论(0) 收藏 举报 分类: java基础及多线程(28) 版权声明:本文为博主原创文章,未经博主允许不得转载.   ...

  4. Java网络编程之UDP

    Java网络编程之UDP 一.C/S架构中UDP网络通信流程 ①创建DatagramSocket与DatagramPacket对象 ②建立发送端,接收端 ③建立数据包 ④调用Socket的发送.接收方 ...

  5. Java网络编程之URLConnection

    Java网络编程之URLConnecton 一.URLConnection简介 URLConnection是一个抽象类,表示指向URL指定资源的活动连接.URLConnection有两个不同但相关的用 ...

  6. Java网络编程之URL和URI

    Java网络编程之URL与URI 一.URL与URI简介 URI = Universal Resource Identifier 统一资源标志符 URL = Universal Resource Lo ...

  7. Java网络编程之InetAddress浅析

    Java网络编程之InetAddress浅析 一.InetAddress综述 IP地址是IP使用的32位(IPv4)或者128位(IPv6)位无符号数字,它是传输层协议TCP,UDP的基础.InetA ...

  8. Java高性能编程之CAS与ABA及解决方法

    Java高性能编程之CAS与ABA及解决方法 前言 如果喜欢暗色调的界面或者想换换界面,可以看看我在个人博客发布的 Java高性能编程之CAS与ABA及解决方法. CAS概念 CAS,全称Compar ...

  9. Java并发编程之CAS二源码追根溯源

    Java并发编程之CAS二源码追根溯源 在上一篇文章中,我们知道了什么是CAS以及CAS的执行流程,在本篇文章中,我们将跟着源码一步一步的查看CAS最底层实现原理. 本篇是<凯哥(凯哥Java: ...

随机推荐

  1. 线上Java程序导致服务器CPU占用率过高的问题排除过程

    博文转至:http://www.jianshu.com/p/3667157d63bb,博文更好效果看原版,转本博文的目的就算是个书签吧,需要时候可以定位原文学习 1.故障现象 客服同事反馈平台系统运行 ...

  2. Android WebView基本使用

    转载请注明出处: http://blog.csdn.net/lowprofile_coding/article/details/77928614 WebView介绍 Android WebView在A ...

  3. Java中 Comparator接口 与Comparable 的区别

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt159 comparator接口与Comparable接口的区别 1. Com ...

  4. POJ3228 并查集或二分最大流枚举答案

    忘记写题意了.这题题意:给出每个地点的金矿与金库的数量,再给出边的长度.求取最大可通过边长的最小权值使每个金矿都能运输到金库里. 这题和之前做的两道二分枚举最大流答案的问法很相识,但是这里用最大流速度 ...

  5. 图论中DFS与BFS的区别、用法、详解…

    DFS与BFS的区别.用法.详解? 写在最前的三点: 1.所谓图的遍历就是按照某种次序访问图的每一顶点一次仅且一次. 2.实现bfs和dfs都需要解决的一个问题就是如何存储图.一般有两种方法:邻接矩阵 ...

  6. 转:【Java并发编程】之一:可重入内置锁

    每个Java对象都可以用做一个实现同步的锁,这些锁被称为内置锁或监视器锁.线程在进入同步代码块之前会自动获取锁,并且在退出同步代码块时会自动释放锁.获得内置锁的唯一途径就是进入由这个锁保护的同步代码块 ...

  7. windows下使用密钥登录Linux及xshell代理转发

    1.密钥登录原理 一般我们使用xshell访问远程主机(Linux主机)时,都是先请管理员给我们开一个账户,即为我们设置一个一个用户名和对应的密码,然后我们就可以使用下面的方式登录到远程主机了: 在这 ...

  8. 最简单实用的JQuery实现banner图中的text打字动画效果!!!

    下面,就让小博详细介绍如何实现上面GIF实现的banner图中的文字动画效果,最简单实用的方法(鉴于代码量较小,就内嵌在一个HTML文件中了): 首先,我们要在header导入一个jQuery,并新建 ...

  9. HTML5 javascript 音乐 音频

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  10. 201521123109《java程序设计》第七周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结集合相关内容. 2. 书面作业 ArrayList代码分析 1.1 解释ArrayList的contains源代码 源代码: pub ...