MyBatis 到底值不值得新手学?一位培训班讲师的肺腑之言
大家好,我是老张,一个从培训班“毕业”后干了五年 Java 开发、现在转做后端讲师的普通程序员。今天写这篇《MyBatis基础教程》,不是为了炫技,而是因为我当初学的时候踩过的坑太多了——没人告诉我 MyBatis 和 JDBC 有啥区别,也没人说清楚为什么不用 Python 却要用 Java 搞数据库操作。所以,我想用最直白的话,带零基础的朋友真正入门 MyBatis。
一、MyBatis 是什么?它能帮你解决什么问题?
简单说:MyBatis 是一个 Java 的“数据库翻译官”。
想象一下:你用 Java 写代码,但数据库(比如 MySQL)只认 SQL 语句。你想查用户信息,得手写 SELECT * FROM user WHERE id = ?,还要处理连接、参数、结果集……代码又长又容易出错。
这时候,MyBatis 就来了。它帮你:
- 自动建立数据库连接
- 把 Java 对象自动转成 SQL 参数
- 把 SQL 查询结果自动映射成 Java 对象
📌 举个生活化的例子:
如果你用原生 JDBC,就像自己去菜市场买菜、洗菜、切菜、炒菜——事无巨细都得干。
而 MyBatis 就像点外卖:你只说“我要一份宫保鸡丁”,它就给你做好送上门。
那为什么不用 Python?
Python 确实有 SQLAlchemy、Django ORM 等工具,上手更快。但很多企业后台系统是用 Java 构建的(尤其是银行、电商、大型平台),而 MyBatis 是 Java 生态中最主流的持久层框架之一。学它,是为了进大厂、接项目、拿高薪——现实就是这么直接。
二、环境准备:5 分钟搭好开发环境
别被“环境配置”吓到!我当初装 JDK 都装错了三次,现在我把最简流程列出来:
所需软件清单
| 软件 | 版本建议 | 作用 |
|---|---|---|
| JDK | 8 或 11 | Java 运行环境 |
| Maven | 3.6+ | 项目依赖管理(类似 Python 的 pip) |
| < | IDE | IntelliJ IDEA(社区版免费) |
| MySQL | 5.7 或 8.0 | 数据库 |
步骤 1:创建 Maven 项目
打开 IDEA → New Project → 选 Maven → 不勾选模板 → 输入 GroupId(如 com.example)、ArtifactId(如 mybatis-demo)→ Finish。
步骤 2:添加 MyBatis 和 MySQL 依赖
在 pom.xml 文件中加入以下内容(注意放在 <dependencies> 标签内):
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.13</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.33</version>
</dependency>
💡 小贴士:这就像 Python 里写
pip install mybatis(当然 Python 没有 MyBatis,只是类比)。Maven 会自动下载所有需要的 jar 包。
步骤 3:配置数据库连接
在 src/main/resources 目录下新建 mybatis-config.xml:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/test?useSSL=false&serverTimezone=UTC"/>
<property name="username" value="root"/>
<property name="password" value="你的密码"/>
</dataSource>
</environment>
</environments>
</configuration>
⚠️ 注意:把
你的密码换成你本地 MySQL 的密码。数据库名test要提前创建好。
三、核心概念:三分钟搞懂 MyBatis 怎么工作
MyBatis 的核心就三点,记住了你就入门了:
1. Mapper 接口 + XML 映射文件
- 你写一个 Java 接口(比如
UserMapper) - 再写一个同名的 XML 文件(
UserMapper.xml) - MyBatis 自动把接口方法和 XML 里的 SQL 对应起来
2. SQL 写在 XML 里,不是 Java 代码里
这样做的好处:SQL 和业务逻辑分离,改查询不用动 Java 代码。
3. 自动映射:结果集 → Java 对象
只要数据库字段名和 Java 类属性名一致(或配置别名),MyBatis 自动填充对象。
四、实战:动手写一个“用户查询”功能
我们来做一个最简单的功能:根据 ID 查用户。
步骤 1:创建数据库表
CREATE DATABASE test;
USE test;
CREATE TABLE user (
id INT PRIMARY KEY,
name VARCHAR(50),
email VARCHAR(100)
);
INSERT INTO user VALUES (1, '张三', 'zhangsan@example.com');
步骤 2:创建 User 实体类
// src/main/java/com/example/User.java
public class User {
private int id;
private String name;
private String email;
// 必须要有 getter/setter(IDEA 可右键生成)
public int getId() { return id; }
public void setId(int id) { this.id = id; }
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public String getEmail() { return email; }
public void setEmail(String email) { this.email = email; }
}
步骤 3:创建 Mapper 接口
// src/main/java/com/example/UserMapper.java
public interface UserMapper {
User selectUserById(int id);
}
步骤 4:编写 XML 映射文件
在 src/main/resources 下新建目录 com/example(对应包路径),再建 UserMapper.xml:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.UserMapper">
<select id="selectUserById" resultType="com.example.User">
SELECT * FROM user WHERE id = #{id}
</select>
</mapper>
🔑 关键点:
namespace必须是接口的全限定名id必须和接口方法名一致#{id}会自动替换为方法参数
步骤 5:在主配置文件中注册 Mapper
回到 mybatis-config.xml,在 <configuration> 标签内添加:
<mappers>
<mapper resource="com/example/UserMapper.xml"/>
</mappers>
步骤 6:写测试代码
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import java.io.InputStream;
public class Main {
public static void main(String[] args) throws Exception {
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
try (SqlSession session = sqlSessionFactory.openSession()) {
UserMapper mapper = session.getMapper(UserMapper.class);
User user = mapper.selectUserById(1);
System.out.println("用户:" + user.getName() + ", 邮箱:" + user.getEmail());
}
}
}
运行后,你应该看到输出:用户:张三, 邮箱:zhangsan@example.com
✅ 恭喜!你已经成功跑通了第一个 MyBatis 程序!
五、新手常见问题 & 避坑指南
Q1:为什么报 “Could not find resource” 错误?
原因:XML 文件没放在正确目录。
解决:确保 UserMapper.xml 在 resources/com/example/ 下(和 Java 包结构一致)。
Q2:字段名是下划线(user_name),Java 属性是驼峰(userName),怎么办?
方案:在 mybatis-config.xml 中开启驼峰映射:
<settings>
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
Q3:能不能不用 XML,直接在 Java 注解里写 SQL?
可以!但不推荐新手用。注解适合简单 SQL,复杂查询(比如多表关联)还是 XML 更清晰。
Q4:MyBatis 和 Hibernate 有什么区别?
| 对比项 | MyBatis | Hibernate |
|---|---|---|
| 控制粒度 | 精细(你写 SQL) | 自动(框架生成 SQL) |
| 学习曲线 | 较平缓 | 较陡峭 |
| 性能优化 | 容易(SQL 你掌控) | 难(黑盒) |
| 适合场景 | 复杂查询、遗留系统 | 快速开发、简单 CRUD |
📚 书籍推荐:如果你喜欢系统学习,我强烈推荐《MyBatis 从入门到精通》(刘增辉著)。这本书从原理到实战讲得很透,比网上碎片化教程强太多。
六、下一步怎么学?我的真心建议
- 先掌握基础 CRUD:增删改查都要会写。
- 学动态 SQL:
<if>,<foreach>这些标签超实用。 - 理解一级/二级缓存:面试常问!
- 结合 Spring Boot:实际项目都用
MyBatis-Spring-Boot-Starter。 - 对比学习:看看 JPA、Hibernate,理解 ORM 的不同设计哲学。
最后说一句:不要因为 MyBatis 是 Java 的就抗拒。技术没有好坏,只有适不适合。你现在花一周学会 MyBatis,可能就拿到了第一份实习 offer。
我当初在培训班,就是靠这个框架进了人生第一家互联网公司。希望这篇教程,也能成为你编程路上的一块垫脚石。
加油,未来的开发者!

评论 0