零基础也能学会的 MyBatis 入门实战指南
大家好,我是一名从培训班出来的前端开发者,但别误会——今天我不是来讲 Vue 或 React 的。在项目协作中,我经常和后端打交道,也深知很多刚入门的同学(尤其是像我当初那样)对“数据库怎么和 Java 代码连起来”这件事一头雾水。更别说听到“持久层框架”、“ORM”这些词就发懵。
所以今天,我想用最接地气的方式,带完全零基础的朋友走进 MyBatis 的世界。你不需要懂复杂的理论,只要会写一点 Java,哪怕只是“Hello World”水平,就能跟着做完这个小项目。
顺便说一句:虽然本文主题是 MyBatis,但我会在合适的地方自然融入你提到的关键词——区块链、Java、前端、爬虫,让你看到它们之间的联系,而不是生硬堆砌。
为什么我们需要 MyBatis?
想象一下:你写了一个 Java 程序,想把用户注册信息存到数据库里。传统做法是:
- 加载数据库驱动
- 建立连接
- 写 SQL 语句(比如
INSERT INTO users...) - 执行查询
- 处理结果集
- 关闭连接
光是这几步,就要写几十行样板代码!而且每次操作数据库都得重复一遍,非常繁琐。
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 项目
- 打开 IDEA → New Project → 选择 Maven
- GroupId 填
com.example,ArtifactId 填mybatis-demo - 点击 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 的核心就三件事:
- Java 对象(POJO):比如一个
User类,有 id、name、email 字段。 - SQL 映射文件(XML):写 SQL 的地方,比如
SELECT * FROM users WHERE id = ? - 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&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 从本地数据库查询已解析的交易记录,大幅提升访问速度。
下一步学习建议
你已经迈出了第一步!接下来可以:
- 学习 MyBatis 注解方式:不用 XML,直接在接口上写 SQL(更简洁)
- 整合 Spring Boot:现在企业基本都用
MyBatis + Spring Boot,配置更自动化 - 掌握动态 SQL:比如
<if>、<foreach>,应对复杂查询条件 - 了解分页插件:如 PageHelper,轻松实现列表分页
我当初就是从这样一个小 Demo 开始,三个月后进了第一家公司做后端开发。记住:每个大神都曾是小白。
结语
MyBatis 并不神秘,它只是一个帮你省去重复劳动的工具。只要你理解了“对象 ↔ 数据库”的映射思想,剩下的就是多练习。
希望这篇教程能帮你少走弯路。如果你是从培训班出来的,或者正在自学 Java 后端,别怕慢,每天敲一点代码,进步就在不知不觉中。
动手试试吧!你的第一个 MyBatis 程序,就从插入“张三”开始 😄

评论 0