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

代码收容所
2025-06-25 23:44
阅读 660

一、开篇:MyBatis 是什么?能做什么?

一、开篇:MyBatis 是什么?能做什么?

在 Java 开发中,我们经常需要把数据从数据库中读取出来,或者将程序中的数据保存到数据库中。这个过程中会涉及到大量的 SQL 操作,比如:

  • 查询用户信息
  • 新增订单记录
  • 更新产品价格
  • 删除某个用户的评论

如果我们手动去写这些 SQL,不仅要拼接字符串,还要处理结果集(ResultSet)映射,代码量大、容易出错。

MyBatis 就是为了解决这个问题而诞生的。它是一个 轻量级的 Java 持久层框架,说白了就是:帮你更方便地操作数据库。

✅ 简单说一句:MyBatis = 简化数据库操作 + 灵活控制 SQL


二、环境准备:手把手搭建开发环境

二、环境准备:手把手搭建开发环境

在开始使用 MyBatis 之前,我们要准备好开发环境。包括以下几个部分:

1. JDK 安装

确保你电脑上安装好了 Java 开发环境,推荐使用 JDK 8 或以上版本。

java -version
javac -version

如果没安装,可以去 Oracle官网 下载安装。


2. Maven 工具安装

MyBatis 支持多种构建方式,我们这里用最常用的 Maven 来管理项目依赖。

安装方法如下:

  1. Maven官网 下载压缩包。
  2. 解压后配置系统环境变量 MAVEN_HOMEPATH
  3. 验证是否安装成功:
mvn -v

3. 数据库环境准备

我们以 MySQL 为例来演示 MyBatis 的使用。

步骤 1:安装 MySQL

可以从 MySQL官网 下载安装包,按照提示安装即可。

步骤 2:创建数据库和表

打开 MySQL 控制台或客户端工具(如 Navicat、DBeaver),执行以下 SQL:

CREATE DATABASE mybatis_demo;

USE mybatis_demo;

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

4. IDE 推荐:IntelliJ IDEA 或 Eclipse

推荐使用 IntelliJ IDEA(简称 IDEA),功能强大且对 Maven 项目支持很好。Eclipse 也可以使用,但配置稍复杂些。

下载地址:


三、核心概念:简单易懂讲透关键知识点

虽然 MyBatis 功能强大,但刚接触时只需要掌握几个基本概念就够了。


1. Mapper 文件:SQL 写在这里

MyBatis 把所有的 SQL 写在 XML 文件中,称为 Mapper 文件

举个例子:我们想查询所有用户的信息,SQL 可以这样写:

<!-- UserMapper.xml -->
<select id="findAllUsers" resultType="User">
    SELECT * FROM users;
</select>

其中:

  • <select> 表示这是一个查询语句;
  • id 是这个 SQL 的唯一标识,类似于方法名;
  • resultType 指定返回类型,我们后面再详细讲解。

2. 实体类(POJO)

SQL 查询的结果最终要变成 Java 对象。因此,我们需要定义一个 Java 类,字段与表一一对应。

例如:

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

    // Getter & Setter 省略
}

注意:字段名最好跟数据库列名一致,这样 MyBatis 才能自动映射。


3. Mapper 接口:定义方法的接口

除了 XML 文件之外,还需要定义一个 Java 接口,告诉 MyBatis:

“我要调用哪个 SQL 方法?”

比如:

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

这个接口中的方法名 findAllUsers() 要和 XML 中的 id 保持一致。


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

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

5. 获取 SqlSession:执行 SQL 的入口

我们通过 MyBatis 提供的 SqlSessionFactory 创建 SqlSession,然后拿到 Mapper 接口并调用。

示例代码:

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);
    List<User> userList = mapper.findAllUsers();

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

四、实战项目:跟着教程一步步完成

下面我们来做一个完整的案例:实现用户信息的查询。


第一步:创建 Maven 项目结构

项目结构如下:

mybatis-demo/
├── src/
│   └── main/
│       ├── java/
│       │   └── com/example/demo/
│       │       ├── User.java
│       │       └── UserMapper.java
│       └── resources/
│           ├── mybatis-config.xml
│           └── mapper/
│               └── UserMapper.xml
└── pom.xml

第二步:添加 MyBatis 和 JDBC 依赖

修改 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.28</version>
    </dependency>

    <!-- 日志依赖(可选) -->
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.17</version>
    </dependency>
</dependencies>

第三步:编写实体类 User.java

package com.example.demo;

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

    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; }
}

第四步:编写 Mapper 接口 UserMapper.java

package com.example.demo;

import java.util.List;

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

第五步:编写 Mapper XML 文件 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.demo.UserMapper">
    <select id="findAllUsers" resultType="com.example.demo.User">
        SELECT * FROM users
    </select>
</mapper>

第六步:编写测试类运行程序

新建一个 Main.java

package com.example.demo;

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;
import java.util.List;

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);
            List<User> users = mapper.findAllUsers();

            for (User user : users) {
                System.out.println("ID:" + user.getId()
                        + " | Name:" + user.getName()
                        + " | Email:" + user.getEmail());
            }
        }
    }
}

第七步:运行项目!

在 IDEA 中点击右上角的 ▶️ 图标运行程序,输出类似:

ID:1 | Name:小明 | Email:xiaoming@example.com
ID:2 | Name:小红 | Email:xiaohong@example.com

说明查询成功!


五、常见问题解答(FAQ)

Q1:运行报错:“Invalid bound statement (not found): com.example.demo.UserMapper.findAllUsers”

原因:XML 文件路径不正确或者未被识别。
解决办法

  • 确认 XML 文件位于 resources/mapper/ 目录下
  • 确保 namespace 和接口类名一致
  • 查看 mybatis-config.xml 中的 <mapper> 引用是否正确

Q2:找不到 MySQL 驱动?

原因:没有正确引入 JDBC 驱动依赖。
解决办法

  • 检查 pom.xml 是否包含 mysql-connector-java
  • 如果不是 Maven 项目,请手动导入 jar 包

Q3:字段名和数据库列名不一样怎么办?

你可以使用 resultMap 来自定义映射关系:

<resultMap id="userResultMap" type="User">
    <id property="id" column="id"/>
    <result property="name" column="username"/>
    <result property="email" column="email"/>
</resultMap>

然后在 select 中引用:

<select id="findAllUsers" resultMap="userResultMap">
    SELECT * FROM users
</select>

Q4:IDEA 提示“Cannot resolve symbol 'Resources'”?

这是由于缺少 MyBatis 的 import 语句。手动添加:

import org.apache.ibatis.io.Resources;

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

恭喜你已经掌握了 MyBatis 的基础使用!接下来可以尝试深入以下几个方向:

进阶方向一:MyBatis 动态 SQL

学习 <if>, <foreach>, <choose> 等标签,让你的 SQL 更加灵活。

进阶方向二:关联查询(多表联查)

学习如何通过 <association><collection> 映射一对一、一对多的数据。

进阶方向三:MyBatis 与 Spring 集成

大多数企业项目中,MyBatis 会和 Spring 一起使用,你需要了解:

  • 如何配置 Spring 整合 MyBatis
  • 使用注解代替 XML 编写 SQL

进阶方向四:MyBatis-Plus

MyBatis-Plus 是 MyBatis 的增强工具,提供了很多便捷的功能(如分页插件、自动生成 SQL),适合快速开发。


总结

本篇教程从零带你体验了一次完整的 MyBatis 使用过程。你现在应该能够做到:

  • 理解 MyBatis 的基本用途
  • 搭建开发环境(Maven + MySQL)
  • 编写简单的 SQL 并进行查询
  • 排查常见的运行问题

如果你觉得这篇教程对你有帮助,请点赞收藏,并继续关注后续进阶内容!

Happy Coding 😄

评论 0

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