知识卡片

数据库访问方式的三级抽象演进:嵌入式SQL到ODBC/JDBC到持久层框架

结构图卡

内容

高级语言访问数据库的方式经历了三级抽象跃迁,每一级都在解决上一级 遗留的”程序员仍需了解太多数据库细节”的问题,同时逐步把数据库管理员 和应用程序员的分工划得更清楚。第一级是[[嵌入式SQL需要解决的四类 技术问题及预编译机制]]:SQL语句直接写进宿主语言源码,程序员依然要 用集合式的SQL思维和面向对象的宿主语言思维反复切换,且代码跟特定 数据库产品的SQL方言绑定较紧。第二级是ODBC/JDBC:把”连接数据库、 发送SQL、接收结果”这些操作统一封装成一组标准API,程序员调用API而 不是直接写嵌入式SQL,好处是同一份应用代码可以通过更换驱动程序适配 不同的数据库产品或版本,不需要跟着底层SQL方言变化改代码,代价是 多了一层API转换的性能开销,且一些数据库特有的功能可能没有暴露在 标准API里。第三级是持久层框架(如Hibernate、MyBatis):在ODBC/ JDBC基础上再包一层,把数据库里的表和记录映射成程序里的对象,程序员 基本可以完全用面向对象的方式操作数据、不再直接面对SQL式的集合 操作。这条演进路径上,越往后走,留给数据库管理员编写和维护的部分 (存储过程、存储函数封装的批量数据处理逻辑)与留给应用程序员的部分 (业务逻辑)分得越清楚,程序员对数据库底层细节的感知也越来越少。

结构图

flowchart LR
    A[嵌入式SQL<br/>SQL语句直写进源码<br/>需预编译, 依赖具体SQL方言] --> B[ODBC/JDBC<br/>标准化API封装<br/>可移植但有性能开销]
    B --> C[持久层框架<br/>如Hibernate/MyBatis<br/>表/记录映射为对象<br/>基本脱离SQL式操作]
    A -.程序员数据库细节感知度.-> D[高]
    B -.-> E[中]
    C -.-> F[低]

参考来源

- 位置:《数据库原理(微课版)》第8章《数据库编程》8.4.2-8.4.3节 "利用ODBC/JDBC连接数据库""利用框架连接数据库"(源文件: _epub-src/index_split_005.html) - 结论依据:原文明确"嵌入式SQL流行一段时间后,逐渐被ODBC、JDBC、 OLE DB等数据库访问方式替代了……ODBC使用统一的语法对多种关系 数据库进行访问,使程序员可以忽略Oracle、MySQL等不同数据库管理 系统的区别""持久层框架一般是对JDBC的封装……几乎可以以面向对象 的方式完成所有数据库访问操作""从嵌入式SQL到ODBC/JDBC,再到 持久层框架,对程序员来讲,数据库的使用越来越简单……数据库管理员 与程序员在软件开发中的分工越来越清晰",因此可以推出三级抽象演进 及分工细化的结论。 - 原始内容:从嵌入式SQL到ODBC/JDBC,再到持久层框架,对程序员来讲, 数据库的使用越来越简单,程序员越来越倾向于以面向对象的方式使用 数据库……数据库管理员与程序员在软件开发中的分工越来越清晰。