冷库 东莞网站建设网站制作计划书模板
文章目录
- 1. 五种数据访问模式
 - 1.1 在线访问
 - 1.2 DAO
 - 1.3 DTO
 - 1.4 离线数据模式
 - 1.5 对象/关系映射 (O/R Mapping)
 
- 2. 工厂方法模式在数据访问层应用
 - 3 ORM、Hibernate与CMP2.0设计思想
 - 3.1 ORM
 - 3.2 Hibernate
 - 1)概述
 - 2) Hibernate的架构(2023年的考题)
 - 3)特点
 
- 4. XML Schema的灵活运用
 - 4.1 XML Schema
 - 4.2 Schema组件
 - 4.3 XML Schema规范
 - 1)Primer(入门书/指南)
 - 2)Structures(结构)
 - 3)Datatypes(数据类型)
 
- 5. 事务处理设计
 - 5.1 概述
 - 5.2 ACID原则
 - 1)原子性(Atomicity)
 - 2)一致性(Consistency)
 - 3)隔离性 (Isolation)
 - 4)持久性 (Durability)
 
- 5.3 J2EE对事务的处理
 - 1)JDBC事务
 - 2)JTA事务
 
- 6. 连接对象管理设计
 
1. 五种数据访问模式
1.1 在线访问
- 占用一个数据库连接与数据库交互
 
1.2 DAO
- 概念 
- Data Access Object
 - 是标准 J2EE 设计模式之一(
教材中原话,但这种说法并不对,如果考,还是按教材来) 
 
上一篇笔记《中间层设计》 中我们提到过,业务逻辑组件以它为基础
- 作用 
- 用于抽象和封装所有访问数据库的请求
 - 将底层的数据访问逻辑与业务逻辑分离
 - 从而实现低耦合和高内聚
 
 

- DAO的常见组件 
- 一个DAO工厂类
 - 一个DAO接口
 - 一个实现了DAO接口的具体类 
- 包含访问特定数据源的数据的逻辑
 
 - 数据传输对象
 
 
1.3 DTO
-  
概念
- Data Transfer Object
 - 用于在不同应用层或系统之间传输数据的对象
 - 可以看做一个“数据容器”或者“数据包装器”
 - 本身应该不包含具体的业务逻辑
 - 通常只包含内部一致性检查和基本验证的方法,且不调用其他方法
 
 -  
两种设计方法
- 使用编程语言内置的集合对象
 - 通过创建自定义类来实现DTO 对象
 
 -  
两种设计方法的融合技术
- 代码生成技术 
- 该技术可以生成脱离现有元数据的自定义的DTO类的源代码
 
 - 提供更强大的集合 
- 如:微软 ADO.NET 中的DataSet
 
 
 - 代码生成技术 
 
1.4 离线数据模式
- 概念 
- 从数据源获取数据后,安装
预定结构存放在系统中- 其预定结构如: ADO.NET 中的关系结构、SDO 中的Data图表结构
 
 
 - 从数据源获取数据后,安装
 - 特点: 
- 对数据的操作独不依赖与数据源的连接
 - 可以脱离数据源来定义各异的数据存放结构和规则
 - 可以方便地与XML格式的文档之间互相转换
 
 
1.5 对象/关系映射 (O/R Mapping)
- 概念 
- Object/Relation Mapping
 - 将应用程序中的数据转换成关系型数据库中的记录
 - 将关系数据库中的记录转换成应用程序中的对象
 
 
2. 工厂方法模式在数据访问层应用
- 工厂方法模式: 
- 定义产品对象的创建接口,但由子类实现具体产品对象的创建。
 - 也可以表述为:使一个类的实例化延迟到其子类
 
 
关于工厂方法模式,可以翻我的专栏《golang与设计模式》中《创建型模式-04-工厂方法模式(Factory Method)》一章
- 在数据访问层的应用 
- 首先定义一个操纵数据库的接口
 - 然后根据数据库的不同,由类工厂决定实例化哪个类。
 
 
3 ORM、Hibernate与CMP2.0设计思想
3.1 ORM
- 概念 
- Object-Relation Mapping
 - 在关系型数据库和对象之间作一个映射
 - 操作数据库时只需操作这些对象(而不需要使用SQL)
 
 - 优点 
- 降低学习成本
 - 减少代码量
 - 提高开发效率
 - 降低错误
 - 增强安全性
 
 
3.2 Hibernate
1)概述
- 概念: 
- 是一个开源的对象关系映射框架
 - 它对 JDBC 进行了轻量级的对象封装
 
 - 作用: 
- 提供从 Java类到数据表之间的映射
 - 提供数据查询和恢复机制
 
 - 优点 
- 减少操作数据库的工作量
 
 
另外,教材中提到的一个知识点:
Hibernate 利用代理模式来简化载入类的过程,这将大大减少利用 Hibernate QL 从数据库提取数据的代码的编写量。(想了解代理模式同样可以看我的设计模式专栏,这里不赘述)
2) Hibernate的架构(2023年的考题)

3)特点
- 灵活性性
 
- 提供多种运行方式
 
- 轻型体系中,应用程序提供JDBC 连接,并且自行管理事务,这种方式使用了Hibernate的一个最小子集
 - 在全面解决体系中,对于应用程序来说,所有底层的JDBC/JTA API 都被抽象了,Hibernate会照管所有的细节。
 
- 功能强大
 
4. XML Schema的灵活运用
4.1 XML Schema
- 概念 
- 是一种XML语言
 - 用于描述和约束XML文档的结构和内容模式
 - 它是DTD的替代者,但功能更强大和完善
 - 其自身使用XML 1.0的语法和规则进行描述和定义
 - 使用了命名空间来避免元素和属性名称的冲突
 
 
- DTD的概念
 
- 文档类型定义
 - Document Type Definition
 - 基于XML
 
- XML Schema是Schema组件的集合,下边介绍Schema组件
 
4.2 Schema组件
- 概述 
- 详细说明了抽象数据模型的每个组件的严格语义
 
 
XML Schema是 Schema组件的集合,这些组件分为三组
- 基本组件 
- 包括:简单类型定义、复杂类型定义、属性声明、元素声明
 
 - 组件 
- 包括:属性组、完整性约束定义、模型组、符号声明
 
 - 帮助组件 
- 包括:注释、模型组、小品词、通配符和属性使用
 
 
4.3 XML Schema规范
1)Primer(入门书/指南)
- 概念 
- 一个非标准化的文档
 - 提供了XML Schema 的简单可读的描述
 
 - 目的:快速地理解如何利用 XMLSchema语言创建一个Schema
 
2)Structures(结构)
- 概述: XML Schema中用于定义XML文档结构的元素和规则
 
它包括如何定义XML文档中的元素、元素的顺序、元素的嵌套关系、元素的出现次数等
3)Datatypes(数据类型)
- 概述:是XML Schema中用于定义XML元素、属性的数据类型的机制
 - 特点 
- 提供了丰富的数据类型 
如:string、integer、Boolean、time 和 date等,并且提供了定义新类型的能力
 - 实现了继承和复用
 - 与命名空间紧密联系,易于使用
 
 - 提供了丰富的数据类型 
 
5. 事务处理设计
5.1 概述
- 事务的概念:一组处理步骤要么全部发生,要么一步也不执行
 - 事务的提交:当所有步骤被完整地执行,我们称该事务被提交
 
5.2 ACID原则
1)原子性(Atomicity)
- 事务执行过程中的任何失败都将导致事务所做的任何修改失效
 
2)一致性(Consistency)
- 当事务执行失败时,所有被该事务影响的数据都应该恢复到事务执行前的状态
 
3)隔离性 (Isolation)
- 事务执行过程中对数据的修改,在事务提交之前对其他事务不可见
 
4)持久性 (Durability)
- 持久性表示已提交的数据在事务执行失败时,数据的状态都应该正确。
 
5.3 J2EE对事务的处理
J2EE 应用服务器支持JDBC 事务、JTA(Java Transaction API) 事务和容器管理事务。一般情况下,最好不要在程序中同时使用上述三种事务类型,例如在JTA 事务中嵌套JDBC事务。另外,事务要在尽可能短的时间内完成,不要在不同方法中实现事务的使用。下面举例说明两种事务处理方式。
1)JDBC事务
- JavaBean 中使用 JDBC方式进行事务处理
 - 原理: 
- 默认是auto-commit模式,每个SQL语句都被当作一个事务
 - 屏蔽auto-commit后,调用commit()方法提交事务
 
 
2)JTA事务
- SessionBean 中使用JTA事务
 - 概念: 
- Java Transaction API
 - 它是描述事务接口的,是J2EE 模型的一部分
 
 - JTA的三个主要的接口 
- User Transaction接口
 - Transaction Manager接口
 - Transaction接口
 
 - 原理 
- 调用UserTransaction.begin() 方法开始一个事务
 - UserTransaction.commit()方法终止与当前线程关联的事务
 - UserTransaction.rollback()方法回滚
 
 
6. 连接对象管理设计
- 资源池 
- 意义:解决资源频繁分配、释放所造成的问题
 
 - 过程 
- 创建静态连接池,根据初始化配置将连接放入连接池
 - 客户请求时 
- 若连接池中有空闲连接,则分配给用户
 - 若连接池中没有空闲连接,则选择适合的已分配出去的连接,给客户端复用
 
 - 当客户端释放连接时,根据是否被复用决定是否放回连接池
 
 

