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

代码不眠人
2025-06-29 10:49
阅读 487

文章长度约2584字,适合初学者一步步学习MyBatis的基础使用。


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

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

在开发Java程序时,我们经常需要和数据库打交道。例如,把用户信息存到数据库里,或者从数据库中查询订单数据等等。

Java与数据库之间的交互被称为“持久层”操作。

传统的做法是直接写JDBC代码(Java Database Connectivity),但这种方式写起来很麻烦、重复性强。于是,就有了各种“持久层框架”,帮助我们简化数据库的操作。

🔍 什么是MyBatis?

MyBatis 是一个基于 Java 的持久层框架,它可以让我们用更简单的方式去操作数据库。

它不是全自动的ORM框架(比如Hibernate),而是“半自动化”的:你只需要关注SQL怎么写,MyBatis帮你把结果自动映射成Java对象。

✅ MyBatis优点:

  • SQL和Java代码分离,易于维护。
  • 支持动态SQL,灵活应对复杂条件。
  • 轻量级,不依赖容器即可运行。
  • 性能高,便于调试优化。

🎯 一句话总结

MyBatis 就像是一位翻译官,把你写的 SQL 和数据库的响应翻译成 Java 对象。


二、环境准备:搭建你的第一个MyBatis项目

二、环境准备:搭建你的第一个MyBatis项目

我们要做的第一步:创建一个简单的Maven项目,并引入MyBatis和MySQL驱动。

🛠 步骤1:安装开发工具

🗂 步骤2:创建Maven项目

使用IDEA创建一个新项目,选择 Maven → Create from archetype,选 maven-archetype-quickstart,填写 GroupId 和 ArtifactId。

完成后你会看到如下目录结构:

src/
├── main/
│   ├── java/      --> Java代码放这里
│   └── resources/ --> 配置文件放这里
└── test/
    └── java/      --> 测试代码放这里
pom.xml             --> Maven配置文件

🧾 步骤3:添加MyBatis和MySQL依赖

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

<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.5.9</version>
</dependency>

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.30</version>
</dependency>

保存后,Maven会自动下载所需的jar包。


三、核心概念讲解:理解MyBatis的关键术语

三、核心概念讲解:理解MyBatis的关键术语

虽然一开始看起来有点复杂,但只要理解几个关键概念,MyBatis就变得非常容易。

⚙️ 核心组成部分一览:

名称 作用说明
SqlSessionFactoryBuilder 构建 SqlSessionFactory
SqlSessionFactory 工厂,用来创建 SqlSession
SqlSession 连接数据库的会话对象
Mapper 接口 用于定义数据库操作方法(如查询、新增等)
XML 映射文件 编写 SQL 语句的地方

下面我们来详细说说这些是怎么工作的。


🔁 SqlSessionFactoryBuilder & SqlSessionFactory

这两者是用来创建数据库连接工厂的。你可以把它想象成一个“生产工厂的机器”。

示例代码:

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

上面的代码读取了一个名为 mybatis-config.xml 的配置文件,然后构建了一个可以生成数据库连接的工厂类。

服务器部署方案-2


💬 SqlSession

有了工厂,就能生产产品了。这里的“产品”就是 SqlSession,它是和数据库打交道的具体通道。

示例代码:

try (SqlSession session = sqlSessionFactory.openSession()) {
    // 使用session进行CRUD操作
}

📑 Mapper接口 + XML文件

这是最核心的部分。我们可以将它理解为两部分:

  • Mapper接口:定义你想执行的数据库操作(如查找所有用户)
  • XML映射文件:实际写SQL的地方,并告诉MyBatis如何将结果映射到Java对象

示例:User.java(实体类)

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

    // Getter and Setter 省略
}

示例:UserMapper.java(接口)

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

示例:UserMapper.xml(XML映射文件)

放在 resources 目录下,路径保持一致:

<?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="getAllUsers" resultType="com.example.model.User">
        SELECT * FROM users
    </select>

</mapper>

📌 namespace 必须对应你的接口类全名
📌 id 必须和接口中的方法名一致
📌 resultType 告诉MyBatis这个SQL返回的结果要转换成什么Java类


四、实战项目:写一个“查用户列表”的完整例子

现在我们来动手实现一个功能:从数据库中查询所有用户的列表。

📦 项目结构概览:

src/
├── main/
│   ├── java/
│   │   └── com.example.demo/
│   │       ├── Main.java         --> 主程序
│   │       └── model/User.java   --> 用户实体类
│   │       └── mapper/UserMapper.java
│   ├── resources/
│       ├── mybatis-config.xml
│       └── com/example/mapper/UserMapper.xml
└── pom.xml

📘 步骤1:创建数据库表

登录MySQL,创建一张 users 表:

CREATE DATABASE demo;

USE demo;

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

-- 插入测试数据
INSERT INTO users(name, email) VALUES('Tom', 'tom@example.com');
INSERT INTO users(name, email) VALUES('Jerry', 'jerry@example.com');

📘 步骤2:编写配置文件 mybatis-config.xml

路径: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/demo"/>
                <property name="username" value="root"/>
                <property name="password" value="yourpassword"/>
            </dataSource>
        </environment>
    </environments>

    <mappers>
        <package name="com.example.mapper"/>
    </mappers>

</configuration>

📌 注意修改你的数据库地址、用户名和密码!


📘 步骤3:主函数执行查询

路径:Main.java

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;


![缓存策略对比-1](https://code-guide.oss.shanghai.autogptai.club/common/file/download?name=date2025062910/8b56497c-1d98-42f0-a1e4-a50b763c9bc6.jpg)


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.getAllUsers();

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

▶️ 最终效果:

运行主类后,你会在控制台看到类似输出:

ID: 1, Name: Tom
ID: 2, Name: Jerry

🎉 成功!你已经完成了一个完整的MyBatis查询任务!


五、常见问题解答(FAQ)

问题描述 解决方案
报错:Class not found 检查MyBatis配置中是否包含了正确的Mapper类或XML路径
SQL语句执行但没结果 确保数据库中有相应数据,且SQL正确
无法连接数据库 检查 mybatis-config.xml 中的数据库配置
报错“No transaction manager” 查看 <transactionManager> 设置是否为JDBC
查询结果字段匹配不上 确保数据库列名与Java属性名一致,或使用 <resultMap> 手动映射

💡 小技巧:可以在MyBatis配置中开启日志,查看执行的SQL语句:

mybatis-config.xml 添加:

<settings>
    <setting name="log4j" value="STDOUT_LOGGING"/>
</settings>

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

恭喜你完成了MyBatis入门的第一步!

接下来你可以继续深入以下几个方向:

✅ 动态SQL

MyBatis 提供了强大的动态SQL功能,比如 <if><choose><foreach>,非常适合处理复杂的条件查询。

✅ 注解方式代替XML

除了使用XML文件,也可以使用注解方式写SQL:

@Select("SELECT * FROM users")
List<User> getAllUsers();

✅ 结合Spring Boot使用

在企业项目中,MyBatis通常和Spring Boot一起使用,进一步简化配置和事务管理。

📘 推荐资料


✅ 小结

内容要点 简要说明
MyBatis 是什么 轻量级持久层框架,简化数据库操作
环境搭建 Maven + MyBatis + MySQL
核心组件 SqlSession、Mapper接口、XML映射文件
核心流程 创建会话 -> 获取Mapper -> 执行SQL
实战任务 查询用户列表
学习路线 动态SQL、注解方式、结合Spring Boot

🎯 下一步行动

✅ 自己再独立写一遍本教程中的小项目
✅ 尝试实现“插入用户”功能
✅ 修改查询条件,支持根据名字模糊搜索
✅ 上网查找MyBatis+Spring Boot整合教程


如果你觉得这篇文章对你有帮助,欢迎点赞、收藏或分享给朋友。

持续更新更多Java后端技术文章,敬请关注!

评论 0

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