当前位置: 首页 > news >正文

《系统架构设计师教程(第2版)》第13章-层次式架构设计理论与实践-04-数据访问层设计

文章目录

  • 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 对象
  • 两种设计方法的融合技术

    1. 代码生成技术
      • 该技术可以生成脱离现有元数据的自定义的DTO类的源代码
    2. 提供更强大的集合
      • 如:微软 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. 连接对象管理设计

  • 资源池
    • 意义:解决资源频繁分配、释放所造成的问题
  • 过程
    • 创建静态连接池,根据初始化配置将连接放入连接池
    • 客户请求时
      • 若连接池中有空闲连接,则分配给用户
      • 若连接池中没有空闲连接,则选择适合的已分配出去的连接,给客户端复用
    • 当客户端释放连接时,根据是否被复用决定是否放回连接池

在这里插入图片描述

相关文章:

《系统架构设计师教程(第2版)》第13章-层次式架构设计理论与实践-04-数据访问层设计

文章目录 1. 五种数据访问模式1.1 在线访问1.2 DAO1.3 DTO1.4 离线数据模式1.5 对象/关系映射 (O/R Mapping) 2. 工厂方法模式在数据访问层应用3 ORM、Hibernate与CMP2.0设计思想3.1 ORM3.2 Hibernate1)概述2) Hibernate的架构(2023年的考题&…...

【视觉SLAM】 十四讲ch7习题

简介 本文主要内容是《视觉SLAM十四讲》(第二版)第7章的习题解答,并介绍了在解答习题中的一下思考和总结的经验。本文代码部分参考了:HW-of-SLAMBOOK2 1、除了本书介绍的ORB特征点,你还能找到哪些特征点?…...

K-近邻算法(二)

三、 kd 树 问题导⼊: 实现k 近邻算法时, 主要考虑的问题是如何对训练数据进⾏快速 k 近邻搜索。这在特征空间的维数⼤及训练数据容量⼤时尤其必要。 k 近邻法最简单的实现是线性扫描(穷举搜索),即要计算输⼊实例与…...

WPF学习(2)-UniformGrid控件(均分布局)+StackPanel控件(栈式布局)

UniformGrid控件(均分布局) UniformGrid和Grid有些相似,只不过UniformGrid的每个单元格面积都是相等的,不管是横向的单元格,或是纵向的单元格,它们会平分整个UniformGrid。 UniformGrid控件提供了3个属性…...

ANTSDR E310

ANTSDR E310是一款由微相科技有限公司(MicroPhase)推出的软件无线电(SDR)平台,专为现场部署设计。以下是对ANTSDR E310的详细介绍: 一、主要特点 独立运行的软件无线电:ANTSDR E310具备独立运…...

MySQL 5.7 DDL 与 GH-OST 对比分析

作者:来自 vivo 互联网存储研发团队- Xia Qianyong 本文首先介绍MySQL 5.7 DDL以及GH-OST的原理,然后从效率、空间占用、锁阻塞、binlog日志产生量、主备延时等方面,对比GH-OST和MySQL5.7 DDL的差异。 一、背景介绍 在 MySQL 数据库中&…...

【Python】爬取网易新闻今日热点列表数据并导出

1. 需求 从网易新闻的科技模块爬取今日热点的列表数据,其中包括标题、图片、标签、发表时间、路径、详细文本内容,最后导出这些列表数据到Excel中。 网易科技新闻网址:https://tech.163.com 2. 解决步骤 2.1 前期准备 爬虫脚本中需要引用…...

软件设计之HTML5

软件设计之HTML5 【狂神说Java】HTML5完整教学通俗易懂 学习内容: 软件开发技能点参照:软件开发,小白变大佬,这套学习路线让你少走弯路是认真的,欢迎讨论 软件开发技能点参照:Java学习完整路线&#xff…...

CnosDB 元数据集群 – 分布式时序数据库的大脑

CnosDB 是一个分布式时序数据库系统,其中元数据集群是核心组件之一,负责管理整个集群的元数据信息。 1. 概述 CnosDB 是一个分布式时序数据库系统,其中元数据集群是核心组件之一,负责管理整个集群的元数据信息。元数据包括数据库…...

白骑士的Matlab教学进阶篇 2.5 Simulink

Simulink是MATLAB的扩展工具,提供了一个图形化的建模和仿真环境。它广泛应用于系统设计、仿真、自动控制、信号处理等领域。本文将详细介绍Simulink的简介与基本使用、建立与仿真模型、控制系统设计与仿真、与MATLAB的集成。 Simulink简介与基本使用 什么是Simuli…...

linux安装anaconda

参考 如何在Linux服务器上安装Anaconda(超详细)_linux安装anconda-CSDN博客 官网 Index of / 安装网站 https://repo.anaconda.com/archive/Anaconda3-2024.06-1-Linux-x86_64.sh wget https://repo.anaconda.com/archive/Anaconda3-2024.06-1-Lin…...

python装饰器作用和使用场景

当谈到装饰器时,很多初学者很迷糊,有一个经典的例子可以帮助理解它们的作用。装饰器允许你在不修改函数代码的情况下,动态地改变函数的行为。 一、用法 假设我们有一个简单的函数,用来输出一条简单的问候语: 复制代码…...

Apache Tomcat 7下载、安装、环境变量配置 详细教程

Apache Tomcat 7下载、安装、环境变量配置 详细教程 Apache Tomcat 7下载Apache Tomcat 7 安装Apache Tomcat 7 环境变量配置启动 Apache Tomcat 7测试Tomcat7是否启动成功 Apache Tomcat 7下载 1、下载地址,找到Archives 链接: 官网下载地址 2、找到Tomcat 7&…...

SQL注入实例(sqli-labs/less-20)

0、初始页面 1、确定闭合字符 2、爆库名 3、爆表名 4、爆列名 5、查询最终目标...

Linux Shell面试题大全及参考答案(3万字长文)

目录 解释Shell脚本是什么以及它的主要用途 主要用途 Shell脚本中的注释如何编写? 如何在Shell脚本中定义和使用变量? Shell支持哪些数据类型? 什么是Shell的命令替换?请举例说明。 管道(pipe)和重定向(redirection)有什么区别? 如何在Shell脚本中使用条件语句…...

速盾:cdn优化静态资源加载速度机制

CDN(Content Delivery Network)是一种优化静态资源加载速度的机制。它通过在全球多个地点部署服务器,将静态资源缓存到离用户最近的服务器上,从而提高资源加载速度。 在传统的网络架构中,当用户访问一个网站时&#x…...

04.C++类和对象(中)

1.类的默认成员函数 默认成员函数就是用户没有显式实现,编译器会自动生成的成员函数称为默认成员函数。一个类,我们不写的情况下编译器会默认生成以下6个默认成员函数,需要注意的是这6个中最重要的是前4个,最后两个取地址重载不重…...

【代码随想录训练营第42期 Day23打卡 回溯Part2 - LeetCode 39. 组合总和 40.组合总和II 131.分割回文串

目录 一、做题心得 二、题目与题解 题目一:39. 组合总和 题目链接 题解:回溯 题目二:40.组合总和II 题目链接 题解:回溯 题目三:131.分割回文串 题目链接 题解:回溯 三、小结 一、做题心得 今天是代码随想录…...

书生.浦江大模型实战训练营——(三)Git基本操作与分支管理

最近在学习书生.浦江大模型实战训练营,所有课程都免费,以关卡的形式学习,也比较有意思,提供免费的算力实战,真的很不错(无广)!欢迎大家一起学习,打开LLM探索大门&#xf…...

数据可视化Axure大屏原型制作分享

数据可视化大屏通过清晰、直观且易于理解的方式呈现大量复杂数据,已成为各行各业中不可或缺的工具。Axure作为一款功能强大的原型设计工具,为数据可视化大屏的制作提供了强大的支持和丰富的资源。 Axure RP 是一款强大的原型设计工具,非常适…...

基于FPGA的PID算法学习———实现PID比例控制算法

基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容:参考网站: PID算法控制 PID即:Proportional(比例)、Integral(积分&…...

Java 8 Stream API 入门到实践详解

一、告别 for 循环&#xff01; 传统痛点&#xff1a; Java 8 之前&#xff0c;集合操作离不开冗长的 for 循环和匿名类。例如&#xff0c;过滤列表中的偶数&#xff1a; List<Integer> list Arrays.asList(1, 2, 3, 4, 5); List<Integer> evens new ArrayList…...

从零实现富文本编辑器#5-编辑器选区模型的状态结构表达

先前我们总结了浏览器选区模型的交互策略&#xff0c;并且实现了基本的选区操作&#xff0c;还调研了自绘选区的实现。那么相对的&#xff0c;我们还需要设计编辑器的选区表达&#xff0c;也可以称为模型选区。编辑器中应用变更时的操作范围&#xff0c;就是以模型选区为基准来…...

HTML 列表、表格、表单

1 列表标签 作用&#xff1a;布局内容排列整齐的区域 列表分类&#xff1a;无序列表、有序列表、定义列表。 例如&#xff1a; 1.1 无序列表 标签&#xff1a;ul 嵌套 li&#xff0c;ul是无序列表&#xff0c;li是列表条目。 注意事项&#xff1a; ul 标签里面只能包裹 li…...

C++ 基础特性深度解析

目录 引言 一、命名空间&#xff08;namespace&#xff09; C 中的命名空间​ 与 C 语言的对比​ 二、缺省参数​ C 中的缺省参数​ 与 C 语言的对比​ 三、引用&#xff08;reference&#xff09;​ C 中的引用​ 与 C 语言的对比​ 四、inline&#xff08;内联函数…...

第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明

AI 领域的快速发展正在催生一个新时代&#xff0c;智能代理&#xff08;agents&#xff09;不再是孤立的个体&#xff0c;而是能够像一个数字团队一样协作。然而&#xff0c;当前 AI 生态系统的碎片化阻碍了这一愿景的实现&#xff0c;导致了“AI 巴别塔问题”——不同代理之间…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)

宇树机器人多姿态起立控制强化学习框架论文解析 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架&#xff08;一&#xff09; 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...

莫兰迪高级灰总结计划简约商务通用PPT模版

莫兰迪高级灰总结计划简约商务通用PPT模版&#xff0c;莫兰迪调色板清新简约工作汇报PPT模版&#xff0c;莫兰迪时尚风极简设计PPT模版&#xff0c;大学生毕业论文答辩PPT模版&#xff0c;莫兰迪配色总结计划简约商务通用PPT模版&#xff0c;莫兰迪商务汇报PPT模版&#xff0c;…...

论文阅读笔记——Muffin: Testing Deep Learning Libraries via Neural Architecture Fuzzing

Muffin 论文 现有方法 CRADLE 和 LEMON&#xff0c;依赖模型推理阶段输出进行差分测试&#xff0c;但在训练阶段是不可行的&#xff0c;因为训练阶段直到最后才有固定输出&#xff0c;中间过程是不断变化的。API 库覆盖低&#xff0c;因为各个 API 都是在各种具体场景下使用。…...

深度学习之模型压缩三驾马车:模型剪枝、模型量化、知识蒸馏

一、引言 在深度学习中&#xff0c;我们训练出的神经网络往往非常庞大&#xff08;比如像 ResNet、YOLOv8、Vision Transformer&#xff09;&#xff0c;虽然精度很高&#xff0c;但“太重”了&#xff0c;运行起来很慢&#xff0c;占用内存大&#xff0c;不适合部署到手机、摄…...