1、        数据持久化:将程序中的数据在瞬时状态和持久状态间转换的机制即为数据持久化;

2、        持久化的实现方式:数据库、普通文件、XML文件;

3、        JDBC封装:采用面向接口编程,可以降低代码间的耦合性;

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

先定义统一的API,将操作数据的代码抽象到接口中,业务逻辑代码只需要调用这些接口的实现类的对象,就可以实现对数据的访问了,

从而隔离实现的细节,采用面向接口编程,可以降低代码间的耦合度,提高代码的扩展性和维护性。

优点:

  • ●隔离业务逻辑代码和数据访问代码

●隔离不同数据库的实现

●进行封装的原因:业务代码和数据访问代码耦合:可读性差、不利于后期修改和维护、不利于代码复用;

4、DAO:作用:DAO起着转换器的作用,把实体类转换为数据库中的记录;

DAO模式总结:

  DAO(data  access  Objects) 数据存取对象,位于业务逻辑和持久化之间,实现对持久化数据的访问,

通俗的讲,就是将数据操作封装起来,对外提供相应的接口

在面向对象设计过程中,有一些套路用户解决问题,称为模式,

DAO模式提供了访问关系型数据系统所需操作的接口,将数据访问和业务逻辑分开,对上层提供面向对象的数据访问接口,

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

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

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

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

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

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

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

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

非常流行的数据访问模式——DAO模式

  Data Access Object(数据存取对象)

  位于业务逻辑和持久化数据之间

  实现对持久化数据的访问

DAO模式的组成部分

  DAO接口

  DAO实现类

  实体类

  数据库连接和关闭工具类

4、        properties配置文件:让用户脱离程序本身修改相关的变量设置——使用配置文件;

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

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

添加Properties配置文件步骤:SRC文件夹右键-----NEW -----File-----输出properties结尾的配置文件。

在文件中添加配置信息:
eg:

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

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

Username=epetAdmin                         //数据库用户名

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

n  Java中的配置文件常为properties文件

u  后缀为.properties

u  格式是“键=值”格式

u  使用“#”来注释

       ●Java中提供了Properties类来读取配置文件:

方法名

说   
明

String
getProperty(String key)

用指定的键在此属性列表中搜索属性。通过参数key得到其所对应的值

Object
setProperty(String key,String value)

调用Hashtable的方法put。通过调用基类的put()方法来设置键-值对

void
load(InputStream inStream)

从输入流中读取属性列表 (键和元素对)。通过对指定文件进行装载获取该文件中所有键-值对

void clear()

清除所装载的键-值对,该方法由基类Hashtable提供

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

实体类的特征

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

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

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

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

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

 

JAVA / MySql 编程——第八章 DAO 模式的更多相关文章

  1. Java实验项目六——使用DAO模式实现对职工表的操作

    Program: 利用JDBC访问职工信息表,实现对职工信息的添加.更新.删除.按照职工号查找.查找全部职工的功能. Description:在这里我采用了DAO设计模式完成对职工表的操作,下面介绍一 ...

  2. Java笔记——面向接口编程(DAO模式)

    1.DAO模式  DAO(Data Access Object)模式就是写一个类,把访问数据库的代码封装起来.DAO在数据库与业务逻辑(Service)之间.     l  实体域,即操作的对象,例如 ...

  3. JAVA / MySql 编程——第七章 JDBC

    1.JDBC:JDBA是Java数据库连接(Java DataBase Connectivity)技术的简称,提供连接各种常用数据库的能力:         ●Java是通过JDBC技术实现对各种数据 ...

  4. JAVA / MySql 编程——第二章 初始MySQL

    1. MySQL:        ●  MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司.            MySQL最流行的关系型数据库管理系统, ...

  5. JAVA / MySql 编程——第五章 事务、视图、索引、备份和恢复

    1.事务(Transaction): 事务是将一系列数据操作绑成一个整体进行统一管理. 如果一事务执行成功,则咋子该事务中进行的所有数据更改均会提交,称为数据库中的永久成部分. 如果事务执行是遇到错误 ...

  6. JAVA / MySql 编程—— 第三章 高级查询(一)

    1.        修改表: (1)修改表名语法: ALTER TABLE <旧表名> RENAME [ TO ] <新表名>: 注意:其中[TO]为可选参数,使用与否不影响结 ...

  7. java:并发编程-Callable与Future模式

    自己对线程池的理解: coresize 3 maxsize 5 blockLinkedQuenue 3 当提交的任务在<=3时,创建三个线程干活 大于3时,把任务先加入阻塞式队列,当有空闲的核心 ...

  8. JAVA多线程编程之生产者消费者模式

    Java中有一个BlockingQueue可以用来充当堵塞队列,下面是一个桌面搜索的设计 package net.jcip.examples; import java.io.File; import ...

  9. java面向对象编程——第八章 类的高级概念

    8.1访问修饰符: public:该类或非该类均可访问: private: 只有该类可以访问: protected:该类及其子类的成员可以访问,同一个包中的类也可以访问: 默认:相同数据包中的类可以访 ...

随机推荐

  1. join() 和 sleep() 区别

    来源于<Java多线程编程核心技术> 一.join() 作用 在很多情况,主线程创建并启动子线程,如果子线程中需要进行大量的耗时计算,主线程往往早于子线程结束.这时,如果主线程想等待子线程 ...

  2. REST与DDD

    之前在为什么要使用MVC+REST+CQRS架构我曾经提出DDD是核心,REST是壳的观点,我想在这里详细谈谈我的思路. 今天正好看看到老外一篇博文Why REST is so important:按 ...

  3. 一个WPF小项目小结

    一:缘起 老板有做PC桌面客户端的需求,做的是能耗的计算和评估,要算能耗,就有很多环节,最后对这些环节数据进行一些简单计算.我想要是做的话就用比较熟的wpf,就去聊了下,对方给了1张比较复杂的Exce ...

  4. sass基础2

  5. Redis入门--(二)Jedis的入门

    Jedis相应的jar包 编写一段程序来测试一下 1.新建一个Java的项目 2.引入jedis开发包 3.将包添加到构建路径中 4.创建一个测试类 5.创建一个Jedis的单实例的测试

  6. Http和Https的区别--笔记

    学习链接: 知乎:https://www.zhihu.com/question/19577317 法号桑菜 http://blog.csdn.net/jasonjwl/article/details/ ...

  7. Mincost

    The cost of taking a taxi in Hangzhou is not a constant for each kilometer you travel: the first 4 k ...

  8. css清除浮动的原理

    最近学习css发现了高度塌陷时候要清除浮动,为了理解清楚浮动原理,网上找了不少资料,发现都写的不是很清楚,而且都是一模一样的内容,我在里分享一下我对清楚浮动原理的理解, 如果你已经很了解什么是浮动和浮 ...

  9. (生产)jsonp - 跨域请求

    参考:https://github.com/webmodules/jsonp 参数: url (String) url to fetch opts (Object), optional param ( ...

  10. 菜鸟 学注册机编写之 Android app

    0x00前言 环境及工具: 手机    Nexus 4(己root) 系统版本    Android 5.01 工具    AndroidKiller_V1.2 关于Android平台app注册机的编 ...