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. Devexpress Xtrareport 并排报表

    什么是并排报表呢? 按照我个人理解:并排报表是把两张或者两张以上的报表,放在一个报表页面. 注:为了方便,本示例使用同一个数据源,但是您可以使用相同的方法,而在一个报表文档中显示两个完全不同的 (使用 ...

  2. hibernate课程 初探一对多映射2-3 创建hibernateUtil工具类

    本节主要内容:创建hibernateUtil工具类:demo demo: HibernateUtil.java package hibernate_001; import org.hibernate. ...

  3. baidu-aip-SDK node.js 身份证识别

    最近项目中客户需要实现身份证识别功能,合理计划了之后决定使用百度ai的身份证识别. 身份证识别是文字识别的一种,类似的功能有很多比如驾驶证识别等等,原理都是相同的. 对于前端初学者来说,如果要实现这种 ...

  4. 高仿饿了么mock本地数据

    未使用router新版webpack.dev.conf.js配置本地数据访问:// 引入express 模块 const express = require('express') // 创建expre ...

  5. js实现弹幕效果

    <!DOCTYPE html> <html lang="zh-cn"> <head> <meta charset="UTF-8& ...

  6. iDempiere 使用指南 生产插件(Manufacturing)安装过程

    Created by 蓝色布鲁斯,QQ32876341,blog http://www.cnblogs.com/zzyan/ iDempiere官方中文wiki主页 http://wiki.idemp ...

  7. Java —异常

    异常简介 有异于常态,和正常情况不一样,有错误出现,阻止当前方法或作用域,称为异常. Java中的异常类都继承Throwable类,它有两个子类:Error和Exception.Error很少接触,主 ...

  8. 最近项目需要用到AdminLTE,所以整理一份中文版的小教程

    先介绍一下AdminLTE的官方网站:AdminLTE官方网站 和GitHub:AdminLTE的github,可以在上面自行下载. AdminLTE 是一个完全响应管理模板,主要依赖于 Bootst ...

  9. Angular2、4入门基础知识(小的概念)

    1. 使用引用符来格式化HTML代码. @Component({ selector: 'app-heroes', templateUrl: './heroes.component.html', sty ...

  10. python读入文档中的一行

    从文件log_fusion中读入数据 方法1 f = open("log_fusion.txt") # 返回一个文件对象 line = f.readline() # 调用文件的 r ...