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                             //数据库用户密码

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

后缀为.properties

格式是“键=值”格式

使用“#”来注释

       ●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. Andrew Ng 的 Machine Learning 课程学习 (week3) Logistic Regression

    这学期一直在跟进 Coursera上的 Machina Learning 公开课, 老师Andrew Ng是coursera的创始人之一,Machine Learning方面的大牛.这门课程对想要了解 ...

  2. OnDeserializedAttribute 不能作用于 Xml Serialization 上

    在做测试的时候习惯用xml serialization观察结果.想当然的认为OnDeserialized Attribute 可以同样的使用,但是其实Xml Serialization 并没有实现相对 ...

  3. Bootstrap知识点梳理

  4. bootstrap导航栏的辛酸史

    昨天本来想完成test10的页面内容的,但是给老铁拉出去打麻将呢.不过还好昨天写了一些内容.现在奉上.不作更改. 今天完成的事情:(实现了test9的响应式导航栏的垂直平分和下拉列表的居中问题.) 我 ...

  5. C++ Knowledge series 5

    Programming language evolves always along with Compiler's evolvement On the Cusp of the Object Model ...

  6. arcgis Flex QueryTask

    <esri:Map id="myMap" creationComplete="useMapServicePermaLink()" load="u ...

  7. Trouble Shooting的一些感想(实时补充)

    最近一直做两个产品功能的Merge工作,代码Merge过来之后,发现了很多问题.经过Trouble Shooting,最终发现归根结底都是我们Merge的问题,例如有的Code没有Merge过来,Me ...

  8. 厌烦了写findViewById 试试ButterKnife吧

    先上官网 http://jakewharton.github.io/butterknife/  和 https://github.com/JakeWharton/butterknife 配置开发环境 ...

  9. Java1.7新特性

    1.switch语句支持字符串变量 public String getTypeOfDayWithSwitchStatement(String dayOfWeekArg) { String typeOf ...

  10. System Center Configuration Manager 2016 必要条件准备篇(Part3)

    步骤3.安装SQL Server 2017 注意:在Configuration Manager服务器(CM16)上以本地管理员身份执行以下操作 按照https://go.microsoft.com ...