MyBatis 简介

MyBatis 是 Java 领域使用最广的"半自动"持久层框架:SQL 由开发者亲自编写,框架负责把方法参数绑定进 SQL、把查询结果映射成 Java 对象。它脱胎于早期的 iBATIS 项目,如今由 Apache 基金会孵化、以 mybatis/mybatis-3 在 GitHub 上维护,是 Spring Boot 后端项目最常见的数据库访问方案。

MyBatis 的定位

  • 持久层框架:替你管理 JDBC 连接、预编译语句、参数绑定与结果集转换。
  • 半自动(SQL 映射):SQL 由人写,框架只做"输入参数 → SQL → 输出对象"的映射。
  • 与全自动 ORM 的区别:全自动 ORM(如 Hibernate)由框架根据实体类自动生成 SQL;MyBatis 反过来,一切以你手写的 SQL 为准,可预测、易调优。

与 JDBC 的关系

MyBatis 底层依然是 JDBC,它只是把重复劳动封装了起来。原生 JDBC 每次查询都要写:获取连接、创建 PreparedStatement、逐个 set 参数、遍历 ResultSet、手动封装对象、finally 释放资源。换成 MyBatis 后,这些步骤被框架接管:

环节原生 JDBCMyBatis
连接获取DriverManager/连接池手工写由数据源(dataSource)统一管理
参数绑定ps.setXxx() 逐行写#{} 自动预编译绑定
结果封装rs.getXxx() + new 对象resultType/resultMap 自动映射
资源释放手工 finallySqlSession 自动处理
缓存/插件一级/二级缓存、Interceptor 插件

与 JPA/Hibernate 的关系

JPA(Jakarta Persistence)是官方规范,Hibernate 是它最流行的实现;这类框架"以实体为中心",框架替你生成 SQL。MyBatis"以 SQL 为中心",两者不是替代关系,而是风格之争:

对比项JPA / HibernateMyBatis
SQL 来源框架自动生成开发者手写
简单 CRUD极省事需要写 SQL
复杂 SQL/报表难调优、易生成低效 SQL完全可控
学习曲线概念多(映射、缓存、懒加载)会 SQL + 少量 XML 即可上手
典型团队领域建模驱动DBA/复杂查询多、要精细控制 SQL

主要特性

  • 双驱动开发:Mapper XML 与注解两种写法,复杂 SQL 用 XML,简单 SQL 可用注解。
  • 动态 SQL<if><where><foreach> 等标签按条件拼接 SQL,无需字符串拼接。
  • 强大的结果映射:resultMap 可处理列名不一致、一对一/一对多嵌套、构造函数映射等。
  • 缓存与插件:内置一级/二级缓存;Interceptor 插件机制可做分页、审计、慢 SQL 统计。
  • 生态成熟:官方提供 mybatis-spring、mybatis-spring-boot-starter,可无缝融入 Spring/Spring Boot。

版本主线

  • 当前主流版本主线为 MyBatis 3.5.x,3.x 是 2009 年后完全重写的版本,API 长期稳定向后兼容。
  • 官方文档以 mybatis.org/mybatis-3 为准,含完整中文翻译;版本、依赖坐标的最新情况请以官网与 Maven 中央仓库为准。
  • 运行时要求 Java 8 及以上;每发布一个小版本都持续修复缺陷,建议关注官方 Release 说明再升级。
  • 配套组件与 MyBatis 主版本需匹配:mybatis-spring、mybatis-spring-boot-starter 都有各自的版本对应关系,集成前先查官方兼容说明。

小结

MyBatis 用"手写 SQL + 框架映射"的方式,在 JDBC 的繁琐与全自动 ORM 的不可控之间找到了平衡点,是企业 Java 后端的主流选择。下一节我们从零跑通第一个 MyBatis 程序,亲眼看看它如何工作。

笔记加载中…