MyBatis基础教程:Java持久层框架入门

宋浩宇
2025-06-22 07:22
阅读 250

开篇:MyBatis是什么?用来做什么?

开篇:MyBatis是什么?用来做什么?

在开发 Java 项目时,我们常常需要和数据库打交道。比如查询用户信息、保存订单数据等。传统的做法是直接使用 JDBC(Java Database Connectivity)来操作数据库,但这种方式写起来代码多、维护困难、容易出错。

MyBatis 是一个轻量级的 Java 持久层框架,它的核心作用就是帮助你更方便地操作数据库。它可以简化数据库访问逻辑,让你专注于业务代码,而不是复杂的 JDBC 操作。

你可以把 MyBatis 想象成一个“翻译官”:

  • 它能帮你把 Java 对象翻译成 SQL;
  • 同样也能把数据库返回的结果翻译成 Java 对象;
  • 不仅如此,它还支持动态 SQL,能根据条件拼接语句。

总之,如果你是一个正在学习 Java Web 开发的新手,MyBatis 是你绕不开的一个重要工具


环境准备:搭建你的第一个 MyBatis 开发环境

环境准备:搭建你的第一个 MyBatis 开发环境

所需软件清单:

  1. JDK 1.8+
  2. IDEA 或 Eclipse
  3. MySQL 数据库
  4. Maven 构建工具

💡 如果你是初学者,建议使用 IntelliJ IDEA 社区版 + Maven 的方式来构建项目,因为这种组合最为常见且社区资源丰富。


步骤一:创建 Maven 项目

打开 IDEA,选择 File -> New -> Project,然后选择 Maven

填写 GroupId(组织名,如 com.example)、ArtifactId(项目名,如 mybatis-demo),点击 Finish。

生成的项目结构如下:

mybatis-demo
├── pom.xml
└── src
    └── main
        ├── java
        └── resources

步骤二:添加 MyBatis 和 MySQL 依赖

打开 pom.xml 文件,在 <dependencies> 中添加以下内容:

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

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

    <!-- 日志实现(可选,便于调试) -->
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j-core</artifactId>
        <version>2.17.1</version>
    </dependency>
</dependencies>

⚠️ 注意:版本号可能会更新,请参考 Maven Central 查询最新版本。


步骤三:配置数据库连接信息

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/test?useSSL=false&amp;serverTimezone=UTC"/>
                <property name="username" value="root"/>
                <property name="password" value="your_password"/>
            </dataSource>
        </environment>
    </environments>
</configuration>

替换其中的数据库地址(url)、用户名(username)和密码(password)为你本地 MySQL 的实际信息。


核心概念:什么是 Mapper、SQL 映射文件、SqlSession?

服务器部署方案-1

核心概念:什么是 Mapper、SQL 映射文件、SqlSession?

1. SqlSession

这是 MyBatis 的“执行器”,你可以把它理解为一次与数据库对话的机会(就像你打电话给客服说事)。我们通过它来调用 SQL、获取结果。

2. Mapper 接口

Mapper 是一个普通的 Java 接口,接口中的每个方法都对应一条 SQL 语句。例如:

public interface UserMapper {
    User selectUserById(int id);
}

3. SQL 映射文件(XML)

这是一个 XML 文件,用于定义 SQL 语句及其映射关系。比如:

<?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.mapper.UserMapper">
    <select id="selectUserById" resultType="com.example.model.User">
        SELECT * FROM user WHERE id = #{id}
    </select>
</mapper>
  • namespace 是对应哪个接口;
  • id 是接口的方法名;
  • resultType 是返回值类型(Java 类);
  • #{id} 是传入的参数。

4. 如何绑定接口与 SQL?

你需要告诉 MyBatis 哪些 Mapper 接口和哪些 XML 文件匹配。最简单的做法是在 mybatis-config.xml 中增加下面的内容:

<mappers>
    <mapper resource="mapper/UserMapper.xml"/>
</mappers>

当然,也可以使用注解的方式,暂时我们先用 XML 实现。


实战项目:完成一个简单用户查询系统

我们将一步步实现一个功能:通过 ID 查询用户信息

Step 1:创建用户表和测试数据

在你的数据库中运行以下 SQL:

CREATE DATABASE test;

USE test;

CREATE TABLE user (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(255),
    email VARCHAR(255)
);

INSERT INTO user(name, email) VALUES('张三', 'zhangsan@test.com');

Step 2:创建实体类(Java Bean)

src/main/java/com/example/model/ 下创建 User.java

package com.example.model;

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

    // 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 + '\'' +
                '}';
    }
}

Step 3:编写 Mapper 接口

创建 com.example.mapper.UserMapper.java

package com.example.mapper;

import com.example.model.User;

public interface UserMapper {
    User selectUserById(int id);
}

Step 4:编写 Mapper XML 文件

resources/mapper/ 目录下创建 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.mapper.UserMapper">
    <select id="selectUserById" resultType="com.example.model.User">
        SELECT * FROM user WHERE id = #{id}
    </select>
</mapper>

别忘了将这个文件添加进全局配置:

mybatis-config.xml<mappers> 中加入:

<mapper resource="mapper/UserMapper.xml"/>

Step 5:编写主程序进行测试

创建测试类 MainTest.java

package com.example;

import com.example.mapper.UserMapper;
import com.example.model.User;
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 MainTest {
    public static void main(String[] args) throws Exception {
        // 加载配置文件
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

        // 获取 SqlSession
        try (SqlSession session = sqlSessionFactory.openSession()) {
            // 获取 Mapper 接口的实现类
            UserMapper mapper = session.getMapper(UserMapper.class);
            // 调用方法查询
            User user = mapper.selectUserById(1);
            System.out.println(user);
        }
    }
}

✅ 运行结果应输出类似:

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

如果成功了,恭喜你,你已经完成了你的第一个 MyBatis 示例!


常见问题解答

Q1:为什么出现 “找不到驱动类”的错误?

可能原因:

  • 没有在 pom.xml 中引入 MySQL 驱动;
  • 数据库配置文件中的 driver 写错了;
  • MySQL 服务没有启动;

解决方法:

  • 确认依赖是否引入;
  • 检查配置文件中的 driver 是否是:com.mysql.cj.jdbc.Driver
  • 使用命令行登录 MySQL 测试能否连接成功:mysql -u root -p

Q2:SQL 映射文件无法加载?

可能原因:

  • XML 文件路径不正确;
  • <mapper> 标签中的路径未设置;
  • IDE 未将 XML 文件放入编译目录;

解决方法:

  • 确保 XML 文件放在 resources/mapper/ 目录;
  • 确认 mybatis-config.xml 中是否有正确的 <mapper> 标签;
  • 若使用 Maven,默认会自动处理资源文件,无需额外配置。

Q3:返回的对象字段为 null?

可能原因:

  • 表字段名称与 Java 属性名不一致;
  • 未正确指定 resultType
  • 未使用驼峰命名法导致属性匹配失败;

解决方法:

  • 查看 SQL 是否正确,字段是否映射;
  • 可尝试使用别名或 ResultMap 来显式映射字段;
  • 确保 Java 属性名与数据库字段符合规范(如数据库字段是 create_time,则 Java 写 createTime)。

学习建议:下一步该学什么?

服务器部署方案-2

掌握 MyBatis 的基本使用后,可以沿着以下几个方向继续深入学习:

方向一:学习 MyBatis 注解方式

除了 XML,MyBatis 也支持使用注解来编写 SQL,适合一些小而精的项目。

示例:

@Select("SELECT * FROM user WHERE id = #{id}")
User selectUserById(int id);

方向二:了解 ResultMap 的使用

当你发现字段名和类属性名不一致时,可以通过 <resultMap> 显式映射它们。

方向三:结合 Spring 使用 MyBatis

很多企业项目中,MyBatis 往往是和 Spring 一起使用的。你可以学习:

  • MyBatis 与 Spring 整合;
  • Mapper 自动注入;
  • 动态代理机制;
  • 事务管理等内容。

方向四:尝试动态 SQL

MyBatis 支持非常强大的动态 SQL 功能,比如 <if><choose><foreach>,可以让你在一个 XML 中写出不同条件下的 SQL。


结语:坚持实践,你就能掌握 MyBatis!

本教程从环境搭建到实战项目都给出了完整的代码和步骤,只要你跟着敲一遍,并理解其原理,相信你就可以独立使用 MyBatis 来完成小型项目的数据库操作了。

记住一句话:“编程不是看懂就行,而是要动手练出来”。

祝你在学习 Java 和 MyBatis 的道路上越走越远!💡


🎯 练习建议:

  • 尝试新增一个“查询所有用户”的接口;
  • 编写插入用户的方法;
  • 继续扩展为一个完整的增删改查项目。

如果你遇到任何疑问,欢迎随时提问!

评论 0

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