【笔记-软考】层次式架构-数据访问层设计

Author:赵志乾
Date:2024-07-27
Declaration:All Right Reserved!!!

1. 数据访问模式

  • 在线访问:占用一个连接,通过该连接与数据源进行交互;
  • DAO(Data Acess Object):将数据访问操作与高层业务逻辑分离,其一般包含DAO接口、DAO接口的实现类、DAO工厂类以及数据传输对象,并将访问数据源的逻辑封装至DAO接口的实现类;
  • DTO(Data Transfer Object):本身是一组对象或是数据的容器,用于跨进程或网络边界的数据传输,此类对象不应包含具体的业务逻辑,以便于序列化后跨网络传输;
  • 离线数据模式:从数据源获取数据后,按照预定义结构存放于系统中,作为应用的中心;
  • ORM(Object/Relation Mapping):作为工具或平台,完成应用程序内的对象数据与数据库关系型数据间的相互转化;

2. 工厂模式的应用

        工厂模式定义一个用于创建对象的接口,让子类决定实例化哪一个类,从而将实例化操作延迟到子类中;在数据访问层中,为实现对多种数据库的操作,需先定义一个数据库操纵接口,然后根据数据库的不同,由类工厂决定实例化哪个类;

3. 事务处理

        数据库事务服从ACID原则:

  • 原子性(Atomicity): 事务内的操作要么全部成功,要么全部失败;
  • 一致性(Consistency): 事务执行失败时,被该事务影响的数据都应恢复到事务执行前的状态;
  • 隔离性(Isolation): 事务执行过程中对数据的修改,在事务提交前对其他事务不可见;
  • 持久性(Durability):  已提交的数据在系统崩溃的情况下,依然保持生效;

        J2EE应用服务器一般支持JDBC事务、JTA(Java Transaction API)事务、容器管理事务;

  • JDBC事务:Connection默认为自动提交,其需要先更改为非自动提交模式,在SQL语句均执行完成后进行事务提交,最后再将Connection改为自动提交模式,以便回到初始默认状态;
  • JTA事务:有3个核心接口:UserTransaction、TransactionManager、Transaction;应用程序调用UserTransaction.begin()方法开始一个事务,该事务会与当前线程相关联,调用UserTransaction.commit()方法终止与当前线程关联的事务,调用UserTransaction.rollback()方法将放弃与当前线程关联的当前事务;

4. 连接对象管理 

        数据库连接对象属于重要的共享资源,为解决其频繁分配与释放所带来的性能问题,引入了连接池;

        连接池的核心理念:在系统初始化时,依据配置创建连接并放入连接池内,此后所使用的连接均从该池内获取,以实现连接的高效复用;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/876195.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

每日一练 - Agile Controller业务编排

01 真题题目 下列选项中,属于 Agile Controller 的业务编排的亮点的是:(多选) A.基于三层 GRE 隧道进行编排,业务设备的组网方式、部署位置更加灵活. B.通过拓扑可视化方式进行业务编排,配置简单,管理便捷. C.业务设备的增别,不改变现网转发路由,不改变现网物理拓扑. D.无需…

学习硬件测试01:串口下载+结构体封装说明+程序框架思想+程序框架的搭建+硬件测试程序(P42~P46)

一、串口下载 1.1引入 串口下载就是说用串口来烧录 STM32 的程序。 原因:当调试口(SWD)因为IO口没有设置好等原因被锁定而使用不了时,就需要用串口来更新程序。 1.2如何通过串口烧录程序? 1、选择串口&#xff1a…

python3.7环境搭建

Windows: python各个版本下载链接: Python Releases for Windows | Python.org python3.4以上默认安装了pip pip使用点记录: 1、如果使用了VPN软件,使用pip提示下载失败时,可以先关掉尝试看看问题有没有解决 2、…

每日一题~960 div2 A+B+C(简单奇偶博弈,构造,观察性质算贡献)

A题意: N 长的数组。 一次操作: 最开始的mx 为零。 选出一个数(使得这个数>mx) ,之后将mx 更新为这个数,将这个数置为零。 不能做这个操作的,输。 问是否有先手赢的策略。有的话,输出yes 否则no 当时一…

轻松上手的订单管理系统推荐

本文精选了十款订单管理利器:纷享销客、Zoho CRM、简道云ERP、易订货、盘古云ERP、Cin7 Core、畅捷通T、Salesforce Commerce Cloud、NetSuite、浪潮GS。 市场上有各种各样的订单管理系统,每个看起来功能强大,但到底哪个最适合你的业务需求呢…

mysql的MHA以及故障模拟

目录 MHA概念 MHA的组件 MHA的特点 实验:搭建完成MHA的架构 实验:主备切换 实验结果 实验:故障切换 实验:故障恢复 MHA概念 MHA:高可用模式下的故障切换,基于主从复制。它解决的是单点故障和主从复…

C语言笔记36 •双链表•

1.双向链表的结构 Ps:这⾥的“带头”跟前⾯说的“头节点”是两个概念,实际前⾯的在单链表阶段称呼不严谨,但是为了我们更好的理解就直接称为单链表的头节点。带头链表⾥的头节点,实际为“哨兵位”,哨兵位节点不存储任何…

利用python os datetime subprocess库 实现数据库文件导出

目录 一.前言 二.库的介绍 三.代码及解析 3.1导入需要的库 3.2 : 配置数据库连接信息 3.3定义备份文件存储路径 3.4 实现备份函数 3.4.1确保备份目录存在 3.4.2生成时间戳 3.4.3构建备份文件名和路径 3.4.4 构建 mysqldump 命 3.4.5 执行备份命令 3.4.6处理备份…

《Redis设计与实现》读书笔记-一条命令执行过程

目录 最近在重读《Redis设计与实现》这本书,通过记录笔记,整理知识体系,希望我的笔记分享,能对致力于不断学习的你有点用。 1. 命令请求的执行过程概述 2.1 发送命令请求 2.2 读取命令请求 2.3命令执行(1&#xf…

类和对象 学会啦!

1.组成 属性 行为 2.类和对象的关系 (比方) 类:设计图纸 对象:生产的具体实体 3.面向对象编程 使用对象进行编程,并使用对象来进行具体的工作 示例 class Clock:id Noneprice Nonedef ring(self):import wins…

leetcode 744. 寻找比目标字母大的最小字母

leetcode [744] 寻找比目标字母大的最小字母 方法一: 线性查找 方法一:线性查找 由于给定的列表已经按照递增顺序排序,因此可以从左到右遍历列表,找到第一个比目标字母大的字母,即为比目标字母大的最小字母。 如果目…

基于迁移学习的手势分类模型训练

1、基本原理介绍 这里介绍的单指模型迁移。一般我们训练模型时,往往会自定义一个模型类,这个类中定义了神经网络的结构,训练时将数据集输入,从0开始训练;而迁移学习中(单指模型迁移策略)&#x…

【TypeScript学习打卡第一天】

介绍、常用类型 一、介绍1.概念2.TypeScript 为什么要为 JS 添加类型支持?3.ts的优势 二、ts初体验1.安装编译 TS 的工具包2.编译并运行 TS 代码3.简化运行 TS 的步骤 三、常用类型1.类型注解2.常用基础类型概述(1) 原始类型(2) 数组类型(3) 联合类型(4) 类型别名(5…

【中项第三版】系统集成项目管理工程师 | 第 11 章 规划过程组⑤ | 11.13 - 11.14

前言 第11章对应的内容选择题和案例分析都会进行考查,这一章节属于10大管理的内容,学习要以教材为准。本章上午题分值预计在15分。 目录 11.13 制定预算 11.13.1 主要输入 11.13.2 主要输出 11.14 规划质量管理 11.14.1 主要输入 11.14.2 主要工…

TensorRT推理时间不稳定的解决方案

目录 解决方案 第一步 第二步 效果 解除锁频方法 解决方案 锁定GPU时钟频率(实测有效) 第一步 使用 nvidia-smi -q -d SUPPORTED_CLOCKS 查询GPU支持的最高频率,如下图所示为 8001 MHz 第二步 cmd(管理员权限&#xff09…

【Python机器学习】朴素贝叶斯——使用朴素贝叶斯进行文档分类(理论基础)

机器学习的一个重要应用就是文档的自动分类。在文档分类中,整个文档(比如电子邮件)是实例,而电子邮件中的某些元素则构成特征。虽然电子邮件是一种会不断增加的文本,但我们同样也可以对新闻报道、用户流言、公文等其他…

ubuntu20.04使用systemd服务设置python程序开机自启动

1. 使用 systemd 服务设置开机自启动 假设已经有一个可执行的python程序,然后用一个sh脚本去启动python程序,正常情况使用挂起的方式nohup启动,日志输出到指定文件: sudo touch run.sh sudo chmod 777 run.shsh文件内容如下&…

如何使用 Django 搭建 Web 服务器

如何使用 Django 搭建 Web 服务器 Django 是一个强大的 Python Web 框架,帮助开发者快速构建和维护高质量的 Web 应用。它包括了许多实用的工具和功能,如 ORM(对象关系映射)、模板引擎、表单处理等。下面,我将通过原理…

recursion depth exceeded” error

有些时候不可以用jax.jit装饰器 参考资料:使用 JAX 后端在 Keras 3 中训练 GAN |由 Khawaja Abaid |中等 (medium.com)

JVM GC总结

CMS垃圾回收器 参考:垃圾回收之CMS、G1、ZGC对比:https://developer.baidu.com/article/details/2770126 CMS(Concurrent Mark Sweep)垃圾回收器是一种以获取最短回收停顿时间为目标的收集器。它非常符合在注重用户体验的应用上使…