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

代码收容所
2025-06-26 13:07
阅读 413

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

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

在我们开发Java后端应用时,常常需要与数据库打交道。例如,我们可能需要从数据库中读取用户信息,或者将用户注册的信息保存到数据库中。传统的做法是使用JDBC(Java Database Connectivity)来操作数据库,但这种方式编写代码会很繁琐。

这时候,MyBatis 就登场了。MyBatis 是一个 轻量级的 Java 持久层框架,它的作用就是让我们可以更加方便地操作数据库,而不需要每次都写大量的 JDBC 代码。

你可以把 MyBatis 看作是一个“桥梁”——它连接着你的 Java 对象和数据库中的表。你只需要告诉 MyBatis 你想执行什么 SQL,以及如何将结果映射成 Java 对象,剩下的工作就交给它去做。

接下来我们就一步步带你了解并掌握 MyBatis 的基本用法。


环境准备:搭建我们的开发环境

环境准备:搭建我们的开发环境

要使用 MyBatis,我们需要准备好以下几个工具:

1. Java 开发环境

确保你已经安装了:

  • JDK 8 或以上版本
  • IDE(比如 IntelliJ IDEA 或 Eclipse)

你可以通过命令行输入以下命令验证是否安装成功:

java -version
javac -version

2. MySQL 数据库

这里以 MySQL 为例,你需要:

  • 安装 MySQL(建议使用 5.7 或 8.0)
  • 安装可视化客户端(如 Navicat、MySQL Workbench 或 DBeaver)

安装完成后,启动 MySQL 并创建一个测试数据库:

CREATE DATABASE mybatis_test;
USE mybatis_test;

3. Maven 构建工具

MyBatis 使用 Maven 来管理依赖,所以你也需要安装 Maven,并配置好环境变量。

检查是否安装成功:

mvn -v

4. 创建 Maven 项目

打开 IDEA,新建一个 Maven 工程,结构如下:

mybatis-demo/
├── pom.xml
└── src/
    └── main/
        ├── java/         ← Java源码目录
        └── resources/    ← 配置文件目录

5. 在 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.26</version>
    </dependency>
</dependencies>

这样你的开发环境就准备好了!


核心概念:MyBatis的核心思想与关键组件

数据流转过程-1

核心概念:MyBatis的核心思想与关键组件

为了让你更轻松地上手 MyBatis,我们先来认识几个非常重要的概念。

1. Mapper接口和XML映射文件

MyBatis 是通过 Mapper 接口 来定义数据库操作的。每一个方法对应一条 SQL 查询或更新语句。

例如,我们可以写一个 UserMapper.java 接口:

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

然后,在 XML 文件中定义这个方法对应的 SQL:

<!-- UserMapper.xml -->
<mapper namespace="com.example.mapper.UserMapper">
    <select id="selectAllUsers" resultType="com.example.model.User">
        SELECT * FROM users;
    </select>
</mapper>

这就是 MyBatis 最核心的设计理念:SQL 与 Java 代码分离,增强可维护性。

2. MyBatis配置文件 mybatis-config.xml

为了让 MyBatis 能正常运行,我们需要配置数据库连接等基本信息,这个配置文件通常命名为 mybatis-config.xml,放在 resources 目录下:

<?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_test?useSSL=false&amp;serverTimezone=UTC"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="mapper/UserMapper.xml"/>
    </mappers>
</configuration>

这个文件的作用是告诉 MyBatis 连接哪个数据库、怎么连接,以及要用哪些映射文件。

3. SqlSessionFactory 和 SqlSession

这是两个重要的类:

  • SqlSessionFactory 是用来创建数据库会话对象的工厂类。
  • SqlSession 表示一次数据库会话,所有的数据库操作都要通过它来完成。

我们会在实际例子中详细展示它们的使用方式。


实战项目:创建第一个 MyBatis 应用

现在,我们来一起完成一个完整的项目,目的是查询所有用户的列表。

第一步:创建数据库表

执行以下 SQL:

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

INSERT INTO users (name, email) VALUES ('张三', 'zhangsan@example.com');
INSERT INTO users (name, email) VALUES ('李四', 'lisi@example.com');

第二步:创建 User Java类

src/main/java/com/example/model/User.java 中创建:

package com.example.model;

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

    // Getters and Setters
    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 接口

com.example.mapper.UserMapper.java

package com.example.mapper;

import com.example.model.User;
import java.util.List;

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

第四步:创建 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="selectAllUsers" resultType="com.example.model.User">
        SELECT * FROM users
    </select>
</mapper>

第五步:编写测试类 Main.java

src/main/java/com/example/Main.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.IOException;
import java.io.InputStream;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        String resource = "mybatis-config.xml";
        InputStream inputStream = null;
        try {
            inputStream = Resources.getResourceAsStream(resource);
        } catch (IOException e) {
            e.printStackTrace();
        }
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        SqlSession session = sqlSessionFactory.openSession();

        try {
            UserMapper mapper = session.getMapper(UserMapper.class);
            List<User> users = mapper.selectAllUsers();
            for (User user : users) {
                System.out.println("ID: " + user.getId() + ", Name: " + user.getName() + ", Email: " + user.getEmail());
            }
        } finally {
            session.close();
        }
    }
}

第六步:运行测试

如果你已经正确配置了数据库连接,在 IDEA 中运行 Main 类,你应该会看到控制台输出类似以下内容:

ID: 1, Name: 张三, Email: zhangsan@example.com
ID: 2, Name: 李四, Email: lisi@example.com

恭喜你!你已经完成了第一个 MyBatis 程序!


常见问题:新手常见疑问与解决方案

问题 解决方案
报错:ClassNotFoundException: com.mysql.cj.jdbc.Driver 检查 pom.xml 是否有 MySQL 驱动依赖
运行时报:Invalid bound statement (not found): com.example.mapper.UserMapper.selectAllUsers 检查 XML 文件路径是否正确,是否被包含在 mybatis-config.xml<mappers> 标签里
执行 SQL 时出现中文乱码 在数据库连接 URL 后面加上 ?characterEncoding=utf8
查询返回空数据 检查数据库是否有对应数据,字段名与类属性名是否一致
Mapper 接口无法注入 确保命名空间与接口全限定类名一致

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

你已经掌握了 MyBatis 的基础用法,接下来可以继续学习这些进阶知识:

  1. 动态 SQL:学会 <if>, <foreach>, <choose> 等标签,实现灵活的 SQL 构造。
  2. 注解方式:除了 XML 方式,MyBatis 也支持使用注解来写 SQL。
  3. 事务管理:了解如何开启事务并进行批量操作。
  4. 关联查询:处理一对多、多对一等复杂关系。
  5. 集成 Spring Boot:学习如何在 Spring Boot 项目中整合 MyBatis,构建完整 Web 应用。

总结

本篇文章从零开始,带你搭建了一个简单的 MyBatis 项目,介绍了它的核心概念,演示了完整的代码流程,并解答了一些常见的问题。

记住一句话:MyBatis 是帮你写 JDBC 的工具,而不是替代你的思考。 多练习 SQL 写法、理解面向对象与关系模型之间的映射,才能真正掌握 MyBatis 的精髓。

如果这篇文章对你有帮助,欢迎点赞、收藏,并继续关注后续的《MyBatis进阶》系列文章!


✅ 下一步推荐阅读:

  • 《MyBatis动态SQL详解》
  • 《MyBatis注解方式开发指南》
  • 《Spring Boot整合MyBatis实战教程》

评论 0

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