java数据库编程之DAO模式
第八章: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模式的更多相关文章
- Java并发编程之CAS
CAS(Compare and swap)比较和替换是设计并发算法时用到的一种技术.简单来说,比较和替换是使用一个期望值和一个变量的当前值进行比较,如果当前变量的值与我们期望的值相等,就使用一个新值替 ...
- Java并发编程之CAS第一篇-什么是CAS
Java并发编程之CAS第一篇-什么是CAS 通过前面几篇的学习,我们对并发编程两个高频知识点了解了其中的一个—volatitl.从这一篇文章开始,我们将要学习另一个知识点—CAS.本篇是<凯哥 ...
- Java网络编程之TCP、UDP
Java网络编程之TCP.UDP 2014-11-25 15:23 513人阅读 评论(0) 收藏 举报 分类: java基础及多线程(28) 版权声明:本文为博主原创文章,未经博主允许不得转载. ...
- Java网络编程之UDP
Java网络编程之UDP 一.C/S架构中UDP网络通信流程 ①创建DatagramSocket与DatagramPacket对象 ②建立发送端,接收端 ③建立数据包 ④调用Socket的发送.接收方 ...
- Java网络编程之URLConnection
Java网络编程之URLConnecton 一.URLConnection简介 URLConnection是一个抽象类,表示指向URL指定资源的活动连接.URLConnection有两个不同但相关的用 ...
- Java网络编程之URL和URI
Java网络编程之URL与URI 一.URL与URI简介 URI = Universal Resource Identifier 统一资源标志符 URL = Universal Resource Lo ...
- Java网络编程之InetAddress浅析
Java网络编程之InetAddress浅析 一.InetAddress综述 IP地址是IP使用的32位(IPv4)或者128位(IPv6)位无符号数字,它是传输层协议TCP,UDP的基础.InetA ...
- Java高性能编程之CAS与ABA及解决方法
Java高性能编程之CAS与ABA及解决方法 前言 如果喜欢暗色调的界面或者想换换界面,可以看看我在个人博客发布的 Java高性能编程之CAS与ABA及解决方法. CAS概念 CAS,全称Compar ...
- Java并发编程之CAS二源码追根溯源
Java并发编程之CAS二源码追根溯源 在上一篇文章中,我们知道了什么是CAS以及CAS的执行流程,在本篇文章中,我们将跟着源码一步一步的查看CAS最底层实现原理. 本篇是<凯哥(凯哥Java: ...
随机推荐
- 深入浅出数据结构C语言版(17)——有关排序算法的分析
这一篇博文我们将讨论一些与排序算法有关的定理,这些定理将解释插入排序博文中提出的疑问(为什么冒泡排序与插入排序总是执行同样数量的交换操作,而选择排序不一定),同时为讲述高级排序算法做铺垫(高级排序为什 ...
- poj 1742 多重背包
题意:给出n种面值的硬币, 和这些硬币每一种的数量, 要求求出能组成的钱数(小于等于m) 思路:一开始直接用多重背包套上去超时了,然后就没辙了,然后参考网上的,说只需要判断是否能取到就行了,并不需要记 ...
- WPF的TextBox水印效果详解
一种自以为是的方式: 本来只是想简单的做个水印效果,在文本框内容为空的时候提示用户输入,这种需求挺常见.网上一搜 都是丢给你你一大段xaml代码.用c#代码实现我是不倾向了 既然用wpf就得Xaml啊 ...
- 初入PHP,(for循环~水仙花数)
找出100-999之间的所有"水仙花数".所谓水仙花数是指一个三位 数,各位数字的立方和等于该数本身.(如153次方=1的3次方+5的3次方+3的3次方)并输出这些数字 想想153 ...
- 201521123084 《Java程序设计》第8周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结集合与泛型相关内容. 1.2 选做:收集你认为有用的代码片段 2. 书面作业 本次作业题集集合 1. List中指定元素的删除(题目 ...
- 个人作业3——个人总结(Alpha阶段)
个人总结 在Alpha冲刺阶段中,我们团队基本完成了项目的大致基础框架,还有很多不足需要更多的时间来让我们做得更好. 对我个人而言,Alpha冲刺阶段是一个强度很大的阶段,每天都在吸收新的知识,团队也 ...
- oop学习 计算器类的规划
类的学习 题目要求 采取面向对象的方法,四则运算自动出题软件,根据需求可以划分为几个类?每个类具有什么属性?每个类具有什么行为? 类与类之间是如何进行协作的?谁给谁发送消息?谁持有谁的引用? 该自动出 ...
- Java-Preferences用法-入门
Properties提供的应用程序解决方案主要存在两个问题: (1)配置文件不能放在主目录中,因为某些OS(如Win9X)没有主目录的概念: (2)没有标准的文件命名规则,存在文件名冲突的可能性. J ...
- 201521123052《Java程序设计》第9周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常相关内容. 2. 书面作业 本次PTA作业题集异常 1.常用异常 题目5-1 1.1 截图你的提交结果(出现学号) 1.2 自己 ...
- PHP面向对象三大特性之一:封装
面向对象的三大特性:封装.继承.多态 1.封装 封装的目的:让类更加安全,做法是不让外界直接访问类的成员 具体做法:1.成员变为私有:访问修饰符(public.private.protected) ...