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

开发者小宇宙
2025-06-13 22:33
阅读 465

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

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

在开发Java程序时,尤其是涉及数据库操作的系统(如电商、后台管理、数据报表等),我们常常需要频繁与数据库打交道。传统的做法是用JDBC直接写SQL语句并手动处理结果集,这样做虽然直接有效,但代码重复性高、可维护性差。

MyBatis 就是一个帮助简化这一过程的 Java 持久层框架(也叫 ORM 框架)。它不像 Spring Data JPA 那样完全自动帮你生成 SQL,而是通过配置文件或注解的方式,将你写的 SQL 与 Java 对象进行映射,实现对数据库的增删改查操作。

你可以把它看作一个“数据库助手”,帮你把数据库中查询出来的数据“翻译”成 Java 对象。

📌 MyBatis特点:

  • 灵活——可以自己写 SQL,控制权更高
  • 轻量级——不依赖容器,适合各种项目
  • 易于集成——常与Spring Boot一起使用
  • 性能好——相比全自动ORM更高效

现在我们就从零开始,一步步学习 MyBatis 的使用。


环境准备:搭建开发环境

环境准备:搭建开发环境

在正式使用 MyBatis 前,你需要准备好以下开发工具和环境:

✅ 开发工具需求

工具 版本说明
JDK 推荐使用 JDK 8 或以上版本
IDE 推荐 IntelliJ IDEA Community Edition
Maven 构建工具,用于依赖管理
MySQL 数据库示例,也可以使用其他数据库

💾 安装步骤简述:

  1. 安装JDK

  2. 安装IDEA

  3. 安装MySQL

  4. 安装Maven


📂 创建一个新的 Maven 项目

  1. 打开 IDEA,选择 "New Project"
  2. 选择 “Maven”
  3. 输入 GroupId(比如:com.example)和 ArtifactId(比如:mybatis-demo
  4. 点击完成,生成项目结构

📦 添加 MyBatis 依赖到 pom.xml

在项目的 pom.xml 文件中添加以下内容:

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

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

保存后,Maven 会自动下载相关库文件。


MyBatis核心概念通俗讲解

为了让初学者更容易理解,我们先来认识几个关键的 MyBatis 概念。


🔧 1. Configuration(配置)

就像每个应用程序都有设置一样,MyBatis 也需要一个配置文件,告诉它如何连接数据库、日志输出方式等等。

通常这个配置文件叫做 mybatis-config.xml

示例: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?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>

缓存策略对比-1

✅ 你可以把它想象成一张地图,告诉 MyBatis:“你要去哪里工作?用什么工具?”


🗃️ 2. Mapper(映射器)

Mapper 是 MyBatis 的核心概念之一,负责定义数据库表和 Java 类之间的关系,以及执行具体的 SQL 操作。

通常有两种方式使用 Mapper:

  1. XML 文件方式(推荐新手使用)
  2. 注解方式

示例:User.java(Java对象类)

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

    // Getters and Setters
}

示例: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="user">
    <select id="selectUserById" resultType="User">
        SELECT * FROM users WHERE id = #{id}
    </select>
</mapper>

📌 这里 <select> 表示查询操作,#{id} 表示占位符,会被传入参数替代。


🔄 3. SqlSession(数据库会话)

SqlSession 是 MyBatis 提供的接口,用于与数据库进行交互。你可以把它看作是一个“连接器”。

通常通过下面步骤获取和使用:

String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession session = sqlSessionFactory.openSession();
try {
    User user = session.selectOne("user.selectUserById", 1);
    System.out.println(user.getName());
} finally {
    session.close();
}

📌 可以把它想象成一个快递员,你想取东西,就得找他帮忙去数据库里取。


实战项目:手把手带你完成第一个例子

我们现在来做一个完整的 CRUD 示例:对用户信息进行查询。

🧱 第一步:创建数据库和表

使用你的 MySQL 客户端创建数据库和表:

CREATE DATABASE testdb;

USE testdb;

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

INSERT INTO users (name, email) VALUES ('Tom', 'tom@example.com');

📘 第二步:编写实体类 User.java

创建文件:src/main/java/com/example/entity/User.java

package com.example.entity;

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

📜 第三步:编写映射文件 UserMapper.xml

放在资源目录下:src/main/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="user">
    <select id="selectUserById" resultType="com.example.entity.User">
        SELECT * FROM users WHERE id = #{id}
    </select>
</mapper>

🛠️ 第四步:编写测试类

新建一个 Java 类:MyBatisTest.java

import com.example.entity.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 MyBatisTest {
    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()) {
            User user = session.selectOne("user.selectUserById", 1);
            if (user != null) {
                System.out.println("用户名:" + user.getName());
                System.out.println("邮箱:" + user.getEmail());
            } else {
                System.out.println("未找到用户!");
            }
        }
    }
}

▶️ 第五步:运行程序,查看结果

如果一切正常,你会看到类似输出:

用户名:Tom
邮箱:tom@example.com

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


新手常见问题解答


❓ Q1:提示找不到驱动类 com.mysql.cj.jdbc.Driver 怎么办?

💡 答:确保你已经在 pom.xml 中正确引入了 MySQL 驱动,并且版本号兼容。另外检查数据库 URL 是否写对,驱动类名是否为 com.mysql.cj.jdbc.Driver


❓ Q2:出现错误:SQLException: No suitable driver found for jdbc:mysql://...

💡 答:通常是驱动未加载或依赖未正确导入。请确认是否已执行 mvn clean install 并刷新项目依赖。


❓ Q3:ResultMap not foundresultType 报错怎么办?

💡 答:可能是因为 resultType 写错了类路径,或者没有正确扫描到 XML 文件。请仔细检查命名空间和类的全限定名。


❓ Q4:为什么我不能直接用驼峰命名转换字段?

💡 答:默认情况下 MyBatis 不会自动做下划线转驼峰,你需要开启配置:

<mapUnderscoreToCamelCase>true</mapUnderscoreToCamelCase>

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

掌握了 MyBatis 的基本使用之后,你可以进一步深入以下几个方向:

  1. 动态 SQL:学会使用 <if> <foreach> 等标签构建复杂 SQL 查询
  2. 注解式开发:尝试不写 XML 文件,只用 Java 注解定义 Mapper
  3. 与 Spring Boot 整合:将 MyBatis 与 Spring 结合使用,实现更优雅的开发
  4. 事务管理:掌握多操作的数据一致性保障
  5. 缓存机制:了解一级缓存和二级缓存提升性能

结语

这篇文章从最基础的 MyBatis 概念讲起,带着你一步步实现了第一个小项目。希望你能从实践中感受到 MyBatis 的强大与便利。

持续练习是最好的老师。试着给用户表增加插入、更新、删除功能吧!

如果你喜欢这样的教学风格,欢迎关注更多后端技术实战教程。📚💻✨


文章总字数:约2757字
预计阅读时间:15~20分钟
实践时间:30分钟+(根据个人进度)

如有疑问,欢迎留言交流 👇

评论 0

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