MyBatis 是独立的 Java 持久层框架,非 MySQL 自带工具;它封装 JDBC 模板代码,支持手写 SQL、XML/注解配置、预编译参数防注入,并需正确配置 mybatis-config.xml 和 Mapper XML,同时注意 MySQL 8+ 驱动版本及时区参数。

MyBatis 不是 MySQL 的一部分,也不是 MySQL 自带的工具;它是一个独立的 Java 持久层框架,用来简化 Java 程序操作 MySQL(或其他关系型数据库)的过程。你用 MySQL 存数据,用 MyBatis 写代码——二者分工明确:MySQL 负责存储和查询,MyBatis 负责“怎么连、怎么发 SQL、怎么把结果变成对象”。
MyBatis 本质是 JDBC 的智能封装
原始 JDBC 每次查库都要写:Connection、PreparedStatement、ResultSet、手动 setString()、循环 next()、还要 close() 防泄漏……代码又臭又长。
MyBatis 把这些模板逻辑全包了,你只管写 SQL 和定义 Java 对象映射关系。
- 它不生成 SQL(不像 Hibernate),SQL 由你手写,所以能精准控制性能和兼容性
- 它不强制要求 POJO 字段名和数据库列名一致,靠
或命名规则(如开启mapUnderscoreToCamelCase=true)做自动映射 - 它支持 XML 配置(
UserMapper.xml)和注解(@Select("SELECT * FROM user")),但生产项目推荐 XML —— SQL 复杂时更易维护、支持动态标签(、)
注意:#{id} 是预编译参数占位符,等价于 JDBC 的 ?,能防 SQL 注入;别错写成 ${id}(字符串拼接,危险!)
为什么必须配 mybatis-config.xml 和 Mapper XML?
MyBatis 启动时需要两个核心配置:
-
mybatis-config.xml:全局配置,定义数据库连接池、事务管理器、类型别名、加载哪些Mapper文件 -
UserMapper.xml:SQL 映射文件,一个接口对应一个 XML,声明 SQL 语句与 Java 方法的绑定关系
常见错误:
本文档主要讲述的是mybatis语法和介绍;MyBatis 是一个可以自定义SQL、存储过程和高级映射的持久层框架。MyBatis 摒除了大部分的JDBC代码、手工设置参数和结果集重获。MyBatis 只使用简单的XML 和注解来配置和映射基本数据类型、Map 接口和POJO 到数据库记录。相对Hibernate和Apache OJB等“一站式”ORM解决方案而言,Mybatis 是一种“半自动化”的ORM实现。感兴趣的朋友可
- 忘记在
mybatis-config.xml中注册,导致SqlSession.getMapper(UserMapper.class)报BindingException - XML 文件路径没放在
resources目录下,Maven 打包后丢失,运行时报Invalid bound statement (not found) -
namespace值写错(比如写成com.example.UserDao却没定义该接口),或方法名与id不一致
MySQL 8+ 驱动和时区问题最容易翻车
用 MySQL 8.0+ 时,mysql-connector-java 版本必须 ≥ 8.0.11,否则报 Unknown system variable 'query_cache_size' 或连接拒绝;同时 URL 必须显式加时区参数,否则 datetime 字段读写错乱。
- 错误写法:
jdbc:mysql://localhost:3306/mybatis_db - 正确写法:
jdbc:mysql://localhost:3306/mybatis_db?useSSL=false&serverTimezone=Asia/Shanghai
另外注意驱动类名变化:
- MySQL 5.x:
com.mysql.jdbc.Driver - MySQL 8.x:
com.mysql.cj.jdbc.Driver
Maven 依赖也得同步更新:
mysql mysql-connector-java 8.0.33
MyBatis 的“轻”是优势,也是陷阱:它不拦着你写烂 SQL,也不自动建表或校验字段类型。真正用好它,关键不是配通,而是理解「SQL 在哪写、参数怎么传、结果怎么映、异常怎么捕」这四件事 —— 尤其是动态 SQL 和嵌套结果映射,线上出问题时,90% 都卡在这几处。









