MyBatis 到底值不值得新手学?一位培训班讲师的肺腑之言

清香如茶
2026-01-06 08:43
阅读 2340

大家好,我是老张,一个从培训班“毕业”后干了五年 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&amp;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.xmlresources/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 从入门到精通》(刘增辉著)。这本书从原理到实战讲得很透,比网上碎片化教程强太多。


六、下一步怎么学?我的真心建议

  1. 先掌握基础 CRUD:增删改查都要会写。
  2. 学动态 SQL<if>, <foreach> 这些标签超实用。
  3. 理解一级/二级缓存:面试常问!
  4. 结合 Spring Boot:实际项目都用 MyBatis-Spring-Boot-Starter
  5. 对比学习:看看 JPA、Hibernate,理解 ORM 的不同设计哲学。

最后说一句:不要因为 MyBatis 是 Java 的就抗拒。技术没有好坏,只有适不适合。你现在花一周学会 MyBatis,可能就拿到了第一份实习 offer。

我当初在培训班,就是靠这个框架进了人生第一家互联网公司。希望这篇教程,也能成为你编程路上的一块垫脚石。

加油,未来的开发者!

评论 0

最热最新
暂无评论
清香如茶Lv.1
0
影响力
0
文章
0
粉丝