OR-Mapping 设计改进(ORMapping 简介)| 学习笔记

简介: 简介:快速学习 OR-Mapping 设计改进(ORMapping 简介)

开发者学堂课程【DAO 开发实战业务分析: OR-Mapping 设计改进(ORMapping 简介)】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/399/detail/5174


OR-Mapping 设计改进(ORMapping 简介)

 

内容介绍:

一、问题的提出与改良

二、OR-Mapping 设计思想


一、问题的提出与改良

现在已经完整地实现了 DAO 的程序结构,但是在这些结构之中,虽然每一层次都已经得到了设计的改良,可是还有一个类存在有大量的重复代码,即为MessageDAOImpl 子类。

如果假设现在项目里面有200张数据表存在的话,那么对于 DAO 的实现而言太过于繁琐,因为所有的 PreparedStatement 设置数据部分需要独立完成,而所有的ResultSet 的结果集转为 VO 类型的操作也要独立完成。

而关键性的设计问题在于大量的 PreparedStatement 设置以及 ResultSet 结果处理过程,

如下:

this.pstmt = this.conn. preparedStatement(sql) ;

this.pstmt.setString(1, vo.getName()) 

this.pstmt.setInt(2,vo.getAge());

this.pstmt.setString(3, vo.getPhone()) 

this.pstmt.setDate(4,new java.sql.Date.(vo.getBirthday().getTime())) ;

this.pstmt.setString(5, vo.getNote()) 

this.pstmt.setString(6, vo.getMid()) 

vo = new Member() ;

vo.setMid(rs.getString(1)) ;

vo.setName(rs.getString(2)) ;

vo.setAge(rs.getInt(3)) ;

vo.setPhone(rs.getString(4)) ;

vo.setBirthday(rs.getDate(5)) ;

vo.setNote(rs.getString(6)) ;

那么既然要消除这样的代码,就必须有一个更好的设计思路,对于增加、修改、删除而言,其基本的形式是固定的。

增加操作大部分都是增加完整数据,修改操作可能有些字段修改而有些不进行修改,所以增加和修改的形式基本上固定,所以应该用一些抽象的方式再将这些功能抽象出来以便于重复调用。

那么自然可以想到应该使用一个抽象类。

再看数据层改良,在正常情况下,当有了一个接口之后,从下方之间向上的一定是子接口,那么在子接口之下还应有一个抽象位存在,称为 AbstractDAOImpl 。

而当有100个 DAO 的接口子位,Prepared、Connection 等属性操作一定会在所有子位定义,所以既然会在所有的子位定义,那么没有必要再进行重复定义,如果被定义在抽象类中,用 prepared 权限来定义比较合适。

此处应该用# conn:

Connection 以及再跟上# pstmt:PreparedStatement 这两个属性来完成。

在此基础上,每一个具体的子位在抽象类的基础上都可以编写大量的子位,抽象类可以为子类提供支持,例如重复的 Impl 过程应该由抽象位提供。

而重用设计的关键为不能直接实例化、必须被继承,与子类共享非私有操作以及可以编写一些所有子类的公共实现方法。

所图:

image.png


二、OR-Mapping 设计思想

(1)OR-Mapping 的基本设计思路

因为传统的 JDBC 提供有相应的操作支持,但是所有的数据库的操作功能都过于琐碎,这就导致了开发者不得不去面对大量重复又枯燥的代码,但不可否认,JDBC的操作实际上提供的就是利用对象实现了数据库的操作,所以JDBC从传统意义上来讲就属于一个传统的“OR-Mapping(对象与关系映射,即可以使用对象直接进行数据库的操作)设计思想,那么下面如果要想将 JDBC 的功能支持更大一些,就必须在 JDBC 的基础上进行进一步的开发操作,以实现代码的可重用设计。所以本次主要讲解单表的优化处理操作。

(2)OR-Mapping 的设计实现

JDBC,Hiberante,JDO,MyBatis,IBatis,JPA,Entity Bean 的实现开发框架。

3)OR-Mapping 的本质

对传统 JDBC 的保障,让用户使用更加方便。

相关文章
|
8月前
|
Kubernetes 安全 异构计算
K8S 部署 Deepseek 要 3 天?别逗了!Ollama+GPU Operator 1 小时搞定
最近一年我都在依赖大模型辅助工作,比如 DeepSeek、豆包、Qwen等等。线上大模型确实方便,敲几个字就能生成文案、写代码、做表格,极大提高了效率。但对于企业来说:公司内部数据敏感、使用外部大模型会有数据泄露的风险。
K8S 部署 Deepseek 要 3 天?别逗了!Ollama+GPU Operator 1 小时搞定
|
存储 Kubernetes 测试技术
Kubernetes snapshots 快照是什么以及如何使用快照
Kubernetes snapshots 快照是什么以及如何使用快照
1026 0
|
算法 Java
java多线程实现体重跟踪
java多线程实现体重跟踪
java多线程实现体重跟踪
|
存储 Java
HashMap的底层数据结构详解
在Java中,HashMap 是一个非常重要的集合类,用于存储键值对(Key-Value)。它提供了快速的数据插入、删除和查找功能。本文将深入探讨 HashMap 的底层数据结构,帮助读者更好地理解其工作原理。
|
9月前
|
SQL 存储 数据库
【赵渝强老师】达梦数据库的归档模式
本文介绍了达梦数据库备份与恢复中重做日志文件的作用,重点讲解了归档模式的必要性及其配置方法。文章分析了非归档模式可能导致的数据丢失问题,并推荐使用归档模式以保障数据一致性和完整性。归档模式分为本地归档和远程归档:本地归档将重做日志存储在本地,而远程归档适用于集群环境,确保所有节点拥有完整日志。文中还详细展示了如何通过SQL命令开启归档模式,包括切换状态、设置路径及验证配置等步骤,并附有视频教程辅助理解。
589 1
|
机器学习/深度学习 人工智能 IDE
Cursor免费 GPT-4 IDE 工具的保姆级使用教程
本文介绍了Cursor这一基于人工智能技术的代码生成工具,包括其特点(利用自然语言处理和深度学习算法,可生成高质量代码,支持多种编程语言,能在多种操作系统上运行)及使用教程。教程内容涵盖下载(通过官网获取对应系统版本并安装)、初始化配置(如配置快捷键、AI指定语言,导入VS Code扩展,设置数据偏好,登录/注册)、安装插件(设置Cursor中文、配置gitee)、配置模型和Key(选择模型、配置密钥、自定义模型并进行测试)以及如何使用(打开提示词面板)等步骤。
12452 6
 Cursor免费 GPT-4 IDE 工具的保姆级使用教程
|
物联网 API 数据库
一文带你认识蓝牙 GATT 协议
正所谓磨刀不误砍柴工,我们有必要先深入的学习一下 GATT 以及 GATT 相关的一些知识。 本文我们就来了解一下 蓝牙 GATT 到底是什么?同时了解下我们使用的 ESP32-C3 GATT示例的工程的代码结构。
8552 5
一文带你认识蓝牙 GATT 协议
|
存储 编译器 C语言
C与C++之间相互调用的基本方法
C与C++之间相互调用的基本方法
289 1
|
安全 UED
麒麟的版本 V10 (Lance) V10 (Tercel) 有什么区别
【6月更文挑战第26天】麒麟的版本 V10 (Lance) V10 (Tercel) 有什么区别
11652 2
|
前端开发 Java
SpringBoot之自定义注解参数校验
SpringBoot之自定义注解参数校验