零基础也能学会的 MyBatis 入门实战指南

南城开发者
2025-12-27 02:34
阅读 656

大家好,我是一名从培训班出来的前端开发者,但别误会——今天我不是来讲 Vue 或 React 的。在项目协作中,我经常和后端打交道,也深知很多刚入门的同学(尤其是像我当初那样)对“数据库怎么和 Java 代码连起来”这件事一头雾水。更别说听到“持久层框架”、“ORM”这些词就发懵。

所以今天,我想用最接地气的方式,带完全零基础的朋友走进 MyBatis 的世界。你不需要懂复杂的理论,只要会写一点 Java,哪怕只是“Hello World”水平,就能跟着做完这个小项目。

顺便说一句:虽然本文主题是 MyBatis,但我会在合适的地方自然融入你提到的关键词——区块链、Java、前端、爬虫,让你看到它们之间的联系,而不是生硬堆砌。


为什么我们需要 MyBatis?

想象一下:你写了一个 Java 程序,想把用户注册信息存到数据库里。传统做法是:

  1. 加载数据库驱动
  2. 建立连接
  3. 写 SQL 语句(比如 INSERT INTO users...
  4. 执行查询
  5. 处理结果集
  6. 关闭连接

光是这几步,就要写几十行样板代码!而且每次操作数据库都得重复一遍,非常繁琐。

MyBatis 就是来解决这个问题的。它是一个 Java 持久层框架,简单说,就是帮你自动完成“Java 对象 ↔ 数据库记录”之间的转换,你只需要关心“我要查什么数据”或“我要存什么内容”,不用再手写那些重复的 JDBC 代码。

我当初学的时候,第一次用 MyBatis 把一条数据插入数据库只用了 5 行代码,简直惊呆了!


开发环境准备(手把手教)

第一步:安装必要工具

你需要以下软件(都是免费的):

工具 用途 下载地址
JDK 8 或 11 运行 Java 程序 Oracle 官网 或 OpenJDK
IntelliJ IDEA(社区版) 编写 Java 代码 jetbrains.com/idea
MySQL 5.7+ 本地数据库 mysql.com
Maven 项目依赖管理 IDEA 自带,无需单独安装

💡 提示:如果你是纯新手,建议用 IDEA 社区版 + 内置 Maven,省去配置烦恼。

第二步:创建 Maven 项目

  1. 打开 IDEA → New Project → 选择 Maven
  2. GroupId 填 com.example,ArtifactId 填 mybatis-demo
  3. 点击 Finish

第三步:添加 MyBatis 和 MySQL 依赖

pom.xml 文件中,加入以下依赖:

<dependencies>
    <!-- MyBatis 核心库 -->
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
        <version>3.5.13</version>
    </dependency>

    <!-- MySQL 驱动 -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.33</version>
    </dependency>

    <!-- 单元测试(可选但推荐) -->
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.13.2</version>
        <scope>test</scope>
    </dependency>
</dependencies>

保存后,IDEA 会自动下载这些包(需要联网)。


核心概念:MyBatis 到底怎么工作?

别被“框架”吓到,MyBatis 的核心就三件事:

  1. Java 对象(POJO):比如一个 User 类,有 id、name、email 字段。
  2. SQL 映射文件(XML):写 SQL 的地方,比如 SELECT * FROM users WHERE id = ?
  3. SqlSession:执行 SQL 的“通道”,你通过它调用映射文件里的 SQL。

整个流程就像这样:

你的 Java 代码 
   ↓ 调用
SqlSession(MyBatis 提供)
   ↓ 执行
Mapper XML 文件中的 SQL
   ↓ 查询/修改
MySQL 数据库
   ↓ 返回结果
自动转成 Java 对象(比如 List<User>)

🌟 关键点:你不用写 ResultSet 解析代码了!


实战项目:做一个简单的用户管理系统

我们现在要实现一个功能:向数据库插入一个用户,并查询出来。

第一步:创建数据库和表

打开 MySQL 命令行或使用图形工具(如 MySQL Workbench),执行:

CREATE DATABASE mybatis_demo;
USE mybatis_demo;

CREATE TABLE user (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(50) NOT NULL,
    email VARCHAR(100) NOT NULL
);

第二步:配置 MyBatis

src/main/resources 目录下新建 mybatis-config.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
  PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
  "http://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/mybatis_demo?useSSL=false&amp;serverTimezone=UTC"/>
        <property name="username" value="root"/>
        <property name="password" value="你的密码"/>
      </dataSource>
    </environment>
  </environments>

  <!-- 注册 Mapper 文件 -->
  <mappers>
    <mapper resource="UserMapper.xml"/>
  </mappers>
</configuration>

⚠️ 注意:把 password 改成你自己的 MySQL 密码!

第三步:定义 Java 实体类

src/main/java/com/example 下新建 User.java

package com.example;

public class User {
    private int id;
    private String name;
    private String email;

    // 必须要有无参构造函数(MyBatis 需要)
    public User() {}

    // getter 和 setter
    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; }

    @Override
    public String toString() {
        return "User{id=" + id + ", name='" + name + "', email='" + email + "'}";
    }
}

第四步:编写 Mapper XML 文件

src/main/resources 下新建 UserMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
  PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
  "http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.example.UserMapper">
  
  <!-- 插入用户 -->
  <insert id="insertUser" parameterType="com.example.User">
    INSERT INTO user (name, email) VALUES (#{name}, #{email})
  </insert>

  <!-- 查询所有用户 -->
  <select id="selectAllUsers" resultType="com.example.User">
    SELECT id, name, email FROM user
  </select>

</mapper>

🔍 说明:

  • namespace 必须是唯一标识,通常用接口全路径(这里先用类路径模拟)
  • #{name} 会自动替换为 User 对象的 name 属性值
  • resultType 告诉 MyBatis 把结果转成什么 Java 对象

第五步:写测试代码

src/test/java/com/example 下新建 MyBatisTest.java

package com.example;

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 org.junit.Test;

import java.io.InputStream;
import java.util.List;

public class MyBatisTest {

    @Test
    public void testInsertAndSelect() throws Exception {
        // 1. 读取配置文件
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        
        // 2. 创建 SqlSessionFactory
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        
        // 3. 打开 SqlSession
        try (SqlSession session = sqlSessionFactory.openSession()) {
            // 4. 插入一个用户
            User user = new User();
            user.setName("张三");
            user.setEmail("zhangsan@example.com");
            session.insert("com.example.UserMapper.insertUser", user);
            
            // 5. 提交事务(重要!否则数据不保存)
            session.commit();
            
            // 6. 查询所有用户
            List<User> users = session.selectList("com.example.UserMapper.selectAllUsers");
            for (User u : users) {
                System.out.println(u);
            }
        }
    }
}

运行这个测试方法,如果控制台输出:

User{id=1, name='张三', email='zhangsan@example.com'}

恭喜你!MyBatis 已经跑起来了!


常见问题解答(新手避坑指南)

Q1:为什么插入数据后查不到?

:忘了调用 session.commit()!MyBatis 默认开启事务,必须手动提交,否则数据不会真正写入数据库。

Q2:报错 “Unknown column 'xxx' in field list”

:检查 XML 中的字段名是否和数据库表一致。比如数据库是 user_name,Java 是 userName,就需要用 resultMap 映射(进阶内容)。

Q3:连接数据库失败,提示 Access denied

:检查 mybatis-config.xml 中的用户名和密码是否正确,以及 MySQL 是否允许本地连接。

Q4:MyBatis 和 Hibernate 有什么区别?

特性 MyBatis Hibernate
SQL 控制 手写 SQL,灵活 自动生成 SQL,抽象高
学习曲线
性能调优 容易(直接看 SQL) 较难
适合场景 复杂查询、遗留系统 快速开发、CRUD 为主

我建议新手先学 MyBatis,理解 SQL 本身更重要。


拓展思考:MyBatis 和其他技术的关系

你可能会问:这和 区块链、前端、爬虫 有啥关系?

其实,任何需要存取数据的系统都离不开持久层

  • 区块链应用:虽然链上数据不可篡改,但很多 DApp(去中心化应用)的用户资料、交易记录缓存仍存在传统数据库中,这时 MyBatis 就派上用场。
  • 前端开发:你写的 Vue/React 页面需要从后端拿数据,而后端很可能用 MyBatis 从数据库查数据再返回 JSON。
  • 爬虫程序:用 Java 写的网络爬虫(比如用 Jsoup 或 HttpClient)抓取数据后,通常要存入 MySQL,MyBatis 能让存储代码更简洁。

举个例子:一个区块链浏览器网站,前端展示交易信息,后端用 MyBatis 从本地数据库查询已解析的交易记录,大幅提升访问速度。


下一步学习建议

你已经迈出了第一步!接下来可以:

  1. 学习 MyBatis 注解方式:不用 XML,直接在接口上写 SQL(更简洁)
  2. 整合 Spring Boot:现在企业基本都用 MyBatis + Spring Boot,配置更自动化
  3. 掌握动态 SQL:比如 <if><foreach>,应对复杂查询条件
  4. 了解分页插件:如 PageHelper,轻松实现列表分页

我当初就是从这样一个小 Demo 开始,三个月后进了第一家公司做后端开发。记住:每个大神都曾是小白


结语

MyBatis 并不神秘,它只是一个帮你省去重复劳动的工具。只要你理解了“对象 ↔ 数据库”的映射思想,剩下的就是多练习。

希望这篇教程能帮你少走弯路。如果你是从培训班出来的,或者正在自学 Java 后端,别怕慢,每天敲一点代码,进步就在不知不觉中。

动手试试吧!你的第一个 MyBatis 程序,就从插入“张三”开始 😄

评论 0

最热最新
暂无评论
匿名用户Lv.1
0
影响力
0
文章
0
粉丝