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

锦上添花
2025-06-25 01:55
阅读 423

一、开篇:MyBatis 是什么?为什么我们需要它?

一、开篇:MyBatis 是什么?为什么我们需要它?

在开发 Java 应用程序时,我们经常需要将数据存入数据库中,比如用户信息、订单记录、商品库存等。而操作数据库往往是一个重复且容易出错的过程。

MyBatis 就是一个用来简化这个过程的工具,它属于“持久层”框架,也就是说,它专门负责处理 Java 和数据库之间的数据交互问题。

1.1 什么是“持久层”?

  • 持久层是应用程序架构中的一个层级,主要任务是将数据长期保存(如数据库)和读取。
  • 简单来说,就是处理“把 Java 对象写进数据库”和“从数据库查数据生成 Java 对象”。

1.2 为什么选择 MyBatis?

  • 不像 Hibernate 那样自动做一切,MyBatis 给你更多控制权。
  • 它让你自己写 SQL,更灵活,适合复杂查询或性能优化。
  • 学习曲线较平缓,非常适合新手入门。

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

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

我们要使用 Maven + MyBatis + MySQL 来创建一个简单的 Java 项目。

2.1 开发工具准备

你需要以下工具:

  • Java JDK(建议使用 Java 8 或以上)
  • Maven(构建工具)
  • MySQL 数据库(本地安装即可)
  • IDE(推荐 IntelliJ IDEA 或 Eclipse)

📝 提示:本文将以 IntelliJ IDEA 为例进行演示。

2.2 创建 Maven 项目

打开 IDEA,新建一个 Maven 工程:

  • GroupId 填写 com.example
  • ArtifactId 填写 mybatis-demo

完成后会自动生成如下结构:

mybatis-demo/
├── pom.xml
└── src/
    └── main/
        ├── java/       ← Java 源代码放这里
        └── resources/  ← 配置文件放这里

2.3 引入 MyBatis 的依赖

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

💡 版本号可能有更新,你可以访问 https://mvnrepository.com 查找最新版本。

2.4 安装并配置 MySQL

安装好 MySQL 后,使用命令行或客户端工具创建一个测试数据库和表:

CREATE DATABASE mydb;

USE mydb;

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

添加一条测试数据:

INSERT INTO user (name, email) VALUES ('张三', 'zhangsan@example.com');

三、核心概念:了解 MyBatis 的关键角色

三、核心概念:了解 MyBatis 的关键角色

虽然 MyBatis 很轻量,但它有几个非常重要的组成部分,我们来一一介绍:

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

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

⚠️ 注意:

  • 替换用户名和密码为你自己的 MySQL 登录信息。
  • 使用 &amp; 替代 URL 中的 & 字符。

3.2 Mapper(映射器)

Mapper 是 MyBatis 的核心部分,它的作用是把 Java 方法和 SQL 语句对应起来。每个 Mapper 接口都可以理解为对一张数据库表的操作接口。

我们将创建一个 UserMapper.java 接口,用于查询用户数据。

UserMapper.java:

package com.example;

import java.util.List;

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

3.3 XML 映射文件

每个 Mapper 接口都需要一个对应的 XML 文件来定义 SQL 语句,比如 UserMapper.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.UserMapper">
    <select id="getAllUsers" resultType="com.example.User">
        SELECT * FROM user
    </select>
</mapper>

3.4 实体类(POJO)

也就是你的 Java 类,代表数据库中的一条数据。例如:

User.java:

package com.example;

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

    // Getter & Setter(省略)
    
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", email='" + email + '\'' +
                '}';
    }
}

小结:各组件关系图

组件 功能
mybatis-config.xml 全局配置,连接数据库
Mapper 接口 定义操作方法(Java)
Mapper XML 文件 编写 SQL 语句
实体类(如 User) 映射数据库字段到 Java 属性

四、实战项目:做一个最简单的查询示例

四、实战项目:做一个最简单的查询示例

现在我们把这些模块组合起来,实现一个功能:查询所有用户信息并打印出来

步骤 1:加载配置并获取 SqlSession

MyBatis 通过 SqlSessionFactory 来创建 SqlSession,这是我们与数据库交互的入口点。

创建一个 Java 测试类 TestMain.java

package com.example;

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 TestMain {
    public static void main(String[] args) throws Exception {
        // 加载配置文件
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

        // 获取 SqlSession
        try (SqlSession session = sqlSessionFactory.openSession()) {
            UserMapper mapper = session.getMapper(UserMapper.class);

            // 查询所有用户
            List<User> users = mapper.getAllUsers();

            // 输出结果
            for (User user : users) {
                System.out.println(user);
            }
        }
    }
}

✅ 确保 mybatis-config.xmlUserMapper.xml 都放在 src/main/resources 目录下。

步骤 2:运行程序

运行 TestMain,如果一切正常,你应该会看到类似输出:

User{id=1, name='张三', email='zhangsan@example.com'}

恭喜!你已经成功完成了一个最简单的 MyBatis 查询示例!


五、常见问题:新手常问的问题解答

缓存策略对比-1

5.1 “找不到 UserMapper.xml 怎么办?”

  • 确保 XML 文件放在 resources 下,并路径一致;
  • mybatis-config.xml 中正确引入该 XML。

5.2 “提示 ‘无效的驱动类’ 如何解决?”

  • 可能是 MySQL 驱动版本不兼容;
  • 确保 JDBC URL 中使用的是正确的驱动类名:com.mysql.cj.jdbc.Driver

5.3 “返回 null 而不是对象怎么办?”

  • 检查数据库字段名称是否与 Java 类属性名称匹配;
  • 如果名字不同,可以使用 <resultMap> 或者 SQL 别名映射。

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

学会 MyBatis 的基本使用只是开始。接下来你还可以继续学习这些进阶内容:

主题 内容简要
插入、更新、删除操作 学习 <insert><update><delete> 标签
参数传递方式 如何使用 @Param 注解或 Map 传参
动态 SQL ifchooseforeach 等标签的应用
结果集映射 复杂的结果处理,比如一对一、一对多
注解式开发 不用 XML,直接写注解来绑定 SQL
与 Spring 整合 实际企业级项目中 MyBatis + Spring 的整合实践

结语:MyBatis 入门虽易,但精通仍需功夫

服务器部署方案-2

希望这篇通俗易懂的《MyBatis基础教程》能帮助你顺利迈出学习的第一步。记住一句话:

编程不是看出来的,是写出来的!

不要怕出错,多多动手练习才是王道。如果你喜欢这种讲解方式,也可以尝试跟着我一步步深入学习 JavaWeb、SpringBoot 等后端技术哦!


📚 附录:完整目录结构参考

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

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

评论 0

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