第六课 · 6.1 从 JDBC 到 MyBatis:SQL 工程化是如何发生的?

如果说 ORM 是"对象如何存在于数据库中的体系",

那 MyBatis,就是这套体系中最靠近数据库的一条工程路线

这一篇不讲 XML 怎么写,不讲分页插件,不教 CRUD。

我们只回答一个问题:

👉 为什么 JDBC 一定会进化出 MyBatis?

一、JDBC 在干什么?------最原始的数据访问形态

在 JDBC 时代,后端访问数据库,几乎是纯手工劳动:

  • 手写 SQL
  • 手写参数绑定
  • 手写结果映射
  • 手写连接与事务管理

一个最普通的查询,至少包含四类代码:

  1. SQL 拼接
  2. 参数处理
  3. 执行与异常
  4. 对象封装

本质上,每个项目都在重复造这套轮子。

👉 JDBC 从来不是"ORM",它只是:

数据库通信协议的 Java 封装。

二、JDBC 的真实痛点(不是"麻烦",是"不可工程化")

如果只是"代码多",其实不是大问题。

真正致命的是:JDBC 让 SQL 难以工程化。

典型问题包括:

1️⃣ SQL 分散,无法管理

  • 写在代码里
  • 拼在字符串中
  • 逻辑和业务混在一起

👉 结果:无法复用、无法规范、无法审计。

2️⃣ 映射逻辑高度重复

  • ResultSet → Object
  • null 处理
  • 类型转换

👉 每个项目都在造"半吊子 ORM"。

3️⃣ 动态 SQL 不可维护

  • if 拼字符串
  • 参数错位
  • SQL 注入风险

👉 可读性、可维护性、可演进性极差。

4️⃣ 数据访问层无法沉淀为"基础设施"

你几乎不可能:

  • 给 JDBC 层统一加审计
  • 统一分页
  • 统一慢 SQL 监控
  • 统一加密/脱敏

👉 因为 JDBC 太原始。

三、MyBatis 出现:不是 ORM,而是"SQL 工程化框架"

MyBatis 的诞生目标非常清晰:

👉 把 JDBC + SQL 这件事,升级为"工程能力"。

它做的核心事情,其实只有四类:

✅ 1. SQL 结构化管理

  • XML / 注解集中管理
  • 与 Java 接口绑定
  • 形成可治理资产

✅ 2. 参数绑定标准化

  • #{} 预编译
  • 类型自动转换
  • 安全防注入

✅ 3. 结果映射自动化

  • ResultMap
  • 驼峰映射
  • 嵌套结构支持

👉 JDBC 时代最大工作量,直接消失。

✅ 4. 动态 SQL 语言化

  • if / choose / foreach / trim
  • SQL 从"字符串",变成"结构语言"

👉 这是 MyBatis 的工程价值核心之一。

四、Mapper 接口:MyBatis 最关键的抽象

MyBatis 真正改变工程形态的,不是 XML,是:

👉 Mapper 接口

java 复制代码
UserMapper.findById(Long id)

这一层的出现,意味着:

  • 数据访问层开始"接口化"
  • SQL 与业务解耦
  • Repository 模式自然形成

Mapper 的本质是:

SQL 的"函数签名"。

这一步,让数据库访问第一次具备了:

  • 可替换性
  • 可测试性
  • 可治理性

👉 这是 JDBC 永远做不到的

五、MyBatis 的本质定位(非常重要)

从系统层级看,MyBatis 从来不是完整 ORM。

它没有:

  • 对象生命周期
  • 脏检查
  • 一级缓存体系
  • 关系自动管理

它只关心:

👉 一条 SQL,如何优雅地执行,并把结果翻译成对象。

所以一个非常准确的定位是:

MyBatis 是 SQL Mapper,不是 ORM 引擎。

也正因为如此:

  • 性能路径清晰
  • 行为完全可控
  • 但工程责任在开发者

六、为什么 MyBatis 天然依赖数据库能力

用 MyBatis,本质是把这件事交给你:

  • SQL 设计权
  • 索引设计权
  • Join 策略
  • 锁与事务粒度

框架不会替你兜底:

  • 不会防 N+1
  • 不会防慢 SQL
  • 不会自动批量
  • 不会理解业务关系

👉 MyBatis 放大能力,也放大短板。

所以它更适合:

  • 有 DBA / 数据库专家的团队
  • 对性能路径高度敏感的系统
  • 报表、统计、核心链路

七、MyBatis 在真实企业中的位置

在大多数中大型系统里,MyBatis 很少"单独存在",而是:

  • 作为复杂查询层
  • 作为核心数据通道
  • 作为性能兜底方案

常见结构是:

  • JPA 管业务对象
  • MyBatis 管复杂 SQL

👉 MyBatis 往往出现在:

"系统最怕慢、最怕错、最怕炸"的地方。

八、本篇你应该真正带走的认知

这篇不要求你会用 MyBatis,但你必须形成几个判断:

  1. MyBatis 的核心价值是"SQL 工程化"
  2. 它解决的是 JDBC 的工程不可控
  3. 它不是 ORM 引擎
  4. 它要求数据库工程能力
  5. 它更像"数据库工程路线"
相关推荐
云烟成雨TD几秒前
Spring AI Alibaba 1.x 系列【56】SAA Admin 平台功能介绍
java·人工智能·spring
Gauss松鼠会几秒前
GaussDB(DWS) 资源监控Topsql
java·网络·数据库·算法·oracle·性能优化·gaussdb
夏日听雨眠1 分钟前
数据结构(快速排序)
java·数据结构·算法
字节高级特工4 分钟前
C++11(一) 革新:右值引用与移动语义
java·开发语言·c++·人工智能·后端
郝学胜-神的一滴5 分钟前
系统设计 012:从用户系统出发,吃透缓存、数据库与高并发设计
java·数据库·python·缓存·php·软件构建
人道领域9 分钟前
【LeetCode刷题日记】654.最大二叉树:递归算法详解
java·算法·leetcode
青云计划9 分钟前
Synchronized 锁升级:从偏向锁到重量级锁的性能进化之路
java·后端
spencer_tseng10 分钟前
HeapOOM && jvisualvm.exe
java·linux·jvisualvm.exe
windawdaysss10 分钟前
离线学习SQL和数据库的工具及其部署
数据库·sql·学习
一条泥憨鱼11 分钟前
详解MySQL事务(超详细版)
java·数据库·mysql·spring·maven·后端开发