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

K8s驯兽师
2025-06-28 19:31
阅读 3078

一、开篇:什么是MyBatis?它用来做什么?

一、开篇:什么是MyBatis?它用来做什么?

1.1 数据库访问的“麻烦事儿”

在开发Java Web项目时,我们常常需要和数据库打交道。比如,一个用户注册功能,就要把用户的账号、密码等信息存入数据库;登录时又要从数据库中查找对应的用户数据。

传统的方式是使用JDBC(Java Database Connectivity),直接写SQL语句去操作数据库,比如下面这段代码:

Connection conn = DriverManager.getConnection(url, username, password);
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM user WHERE id=1");

这种方式虽然可行,但有很多繁琐的问题:

  • 每次都要手动建立连接、处理异常;
  • SQL语句写在Java代码里,难以维护;
  • 查询结果需要手动封装成对象;
  • 不利于复用代码。

这些问题都会增加项目的开发难度和维护成本。

1.2 MyBatis登场:让数据库操作更简单

于是,就有了像MyBatis这样的“中间工具”,来帮助我们简化数据库的操作流程。

MyBatis 是什么?
MyBatis 是一个 Java 的持久层框架,它的核心作用是帮助开发者轻松地实现与数据库之间的交互,而不需要每次都手动写一堆底层的 JDBC 操作。

你可以理解为它是这样一个“翻译官”角色:

  • 你只需要告诉它“我要执行哪条SQL语句”;
  • 它自动帮你完成数据库连接、参数设置、查询执行、结果封装等步骤;
  • 同时还能将数据库的返回结果直接变成 Java 对象,方便后续使用。

1.3 学会 MyBatis 能做什么?

  • 快速连接数据库并增删改查数据;
  • 让业务逻辑与数据库操作分离,提高代码可维护性;
  • 提高开发效率,让你专注于业务逻辑而非底层细节。

二、环境准备:快速搭建你的第一个 MyBatis 开发环境

二、环境准备:快速搭建你的第一个 MyBatis 开发环境

要开始学习 MyBatis,我们需要搭建以下几样东西:

2.1 安装 Java 环境

确保你已经安装了 JDK(Java Development Kit),推荐版本是 JDK 8 或以上。

可以通过命令行输入以下命令来检查是否安装成功:

java -version
javac -version

如果看到类似输出说明安装成功:

java version "17.0.5" 2022-10-18 LTS

2.2 安装 IDE:推荐 IntelliJ IDEA

IntelliJ IDEA 是目前最流行的 Java 开发工具之一,社区版免费可用。

下载地址:https://www.jetbrains.com/idea/download

安装完成后打开,创建一个新的 Java Maven 项目即可。

2.3 安装 MySQL 数据库

MySQL 是一个常见的关系型数据库系统,非常适合初学者练习使用。

测试是否安装成功,可以运行下面的命令:

mysql -u root -p

输入正确密码后会进入 MySQL 控制台,说明安装没问题。

2.4 添加 MyBatis 依赖到 Maven 项目

我们使用 Maven 来管理 Java 项目的依赖包。在 pom.xml 文件中加入 MyBatis 和 MySQL 驱动的依赖:

<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.30</version>
    </dependency>
</dependencies>

保存文件,Maven 会自动下载所需依赖包。


三、核心概念:MyBatis 中的那些“关键角色”

3.1 Mapper:我的“映射地图”

Mapper 是 MyBatis 中非常重要的一个概念,它就像是一个“地图”,告诉我们如何把数据库的结果映射成 Java 对象。

示例:一个用户表 User 对应的 Mapper 接口

假设我们有一个 user 表,包含字段 id, username, email。

我们可以定义一个接口 UserMapper:

public interface UserMapper {
    @Select("SELECT * FROM user WHERE id = #{id}")
    User selectById(int id);
}

这里的 @Select 注解表示这是一个查询操作,后面的 SQL 就是我们要执行的查询语句。

3.2 XML 映射文件:让 SQL 更集中

除了使用注解的方式,还可以通过编写 XML 文件来配置 SQL 语句。

创建文件 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="selectAllUsers" resultType="com.example.model.User">
        SELECT * FROM user
    </select>

</mapper>

这个 XML 文件的作用是替代上面的接口注解方式,适合复杂 SQL 或多个查询的场景。

3.3 SqlSession:数据库连接的“桥梁”

SqlSession 相当于一个“通道”,你可以通过它拿到 Mapper 接口的实现类,并执行 SQL。

通常我们会使用如下方式获取 SqlSession:

String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession sqlSession = sqlSessionFactory.openSession();

try {
    UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
    User user = userMapper.selectById(1);
    System.out.println(user.getUsername());
} finally {
    sqlSession.close();
}

3.4 Configuration:全局配置文件

MyBatis 的配置信息一般放在 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/testdb?serverTimezone=UTC"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>

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

四、实战项目:一步步实现用户信息查询

我们来做个简单的实战项目,目标是:通过 MyBatis 查询出所有用户的信息并显示出来。

4.1 步骤一:创建数据库和用户表

首先,我们先在 MySQL 中创建一个数据库和用户表。

CREATE DATABASE testdb;

USE testdb;

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

INSERT INTO user (username, email) VALUES
('tom', 'tom@example.com'),
('jerry', 'jerry@example.com');

4.2 步骤二:创建 Java 实体类

新建一个实体类 User.java:

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

    // getter and setter
    public int getId() { return id; }
    public void setId(int id) { this.id = id; }

    public String getUsername() { return username; }
    public void setUsername(String username) { this.username = username; }

    public String getEmail() { return email; }
    public void setEmail(String email) { this.email = email; }

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

4.3 步骤三:创建 Mapper 接口和 XML

接口文件 UserMapper.java

public interface UserMapper {
    List<User> selectAllUsers();
}

XML 文件 UserMapper.xml

<select id="selectAllUsers" resultType="com.example.model.User">
    SELECT * FROM user
</select>

4.4 步骤四:调用 MyBatis 查询数据

编写主程序入口类 MainApp.java:

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;


![系统架构设计图-1](https://code-guide.oss.shanghai.autogptai.club/common/file/download?name=date2025062819/330ba16b-0acd-4ef0-af0c-452ae6224865.jpg)


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

public class MainApp {
    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 userMapper = session.getMapper(UserMapper.class);
            List<User> users = userMapper.selectAllUsers();

            for (User user : users) {
                System.out.println(user);
            }
        }
    }
}

4.5 运行结果展示

当你运行这个程序时,控制台应该输出类似如下内容:

User{id=1, username='tom', email='tom@example.com'}
User{id=2, username='jerry', email='jerry@example.com'}

这说明你已经成功通过 MyBatis 读取到了数据库中的用户信息!


五、常见问题解答

❓问题 1:报错提示 “无效的驱动类名 com.mysql.jdbc.Driver” 怎么办?

✅答:这是因为使用的 MySQL 驱动版本问题。

  • 如果你使用的是 MySQL 8.x,请将驱动类改为 com.mysql.cj.jdbc.Driver
  • 并且 URL 地址加上 serverTimezone=UTC 参数:
url=jdbc:mysql://localhost:3306/testdb?serverTimezone=UTC

❓问题 2:MyBatis 查询返回空对象或 null?

✅答:可能的原因有几个:

  • 数据库字段名与 Java 类属性不一致
  • 使用了没有 getter/setter 方法的类
  • XML 中 resultType 写错了路径或者类型
  • 数据库中确实没有数据

可以检查这些地方并逐一排除。

❓问题 3:如何调试 MyBatis 执行的 SQL 语句?

✅答:可以在 mybatis-config.xml 中启用日志记录功能:

<settings>
    <setting name="log4j2" value="true"/>
</settings>

然后添加 Log4j2 依赖,在控制台就能看到执行的 SQL 语句了。


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

恭喜你完成了 MyBatis 的第一个小项目!接下来可以继续深入学习这些内容:

✅ 基础进阶

  • 动态 SQL(if / foreach / choose)
  • 多表关联查询与结果映射
  • 使用注解代替 XML
  • 事务管理(commit / rollback)

📚 推荐书籍和文档

🧪 综合实战建议

尝试做一个完整的 CRUD(增删改查)管理系统:

  • 用户注册
  • 商品管理
  • 订单查询

总结

通过本文的学习,你应该掌握了:

  • MyBatis 是什么,为什么它能简化数据库操作;
  • 如何搭建本地开发环境;
  • MyBatis 的核心组件及它们之间的关系;
  • 编写第一个基于 MyBatis 的 Java 程序;
  • 遇到问题时该如何排查解决。

如果你是完全的新手,不妨跟着文中实例多练习几遍,熟练掌握之后就可以着手做一些小型的数据库项目了!


希望这篇通俗易懂的《MyBatis基础教程》对你有所帮助,加油!🚀

评论 0

最热最新
暂无评论
K8s驯兽师Lv.1
0
影响力
0
文章
0
粉丝