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

高效之彩虹
2025-06-27 19:00
阅读 517

开篇:MyBatis是什么?为什么要用它?

开篇:MyBatis是什么?为什么要用它?

在开发Java应用程序时,我们经常需要将数据保存到数据库中。而传统的做法是使用JDBC(Java Database Connectivity)来操作数据库,这种方式虽然直接但编写起来非常繁琐,代码重复度高且不易维护。MyBatis 是一个轻量级的 Java 持久层框架,它简化了与数据库交互的过程,使开发者能够更专注于业务逻辑而不是底层的 SQL 操作。

MyBatis 的核心思想是“让 SQL 回归程序员手中”,也就是说,它不会像 Hibernate 那样自动生成复杂的 SQL 语句,而是让我们自由地编写 SQL,并通过简单的映射机制自动将结果转换为 Java 对象。这种模式既保留了灵活性,又极大地提高了开发效率。对于初学者而言,学习 MyBatis 能够帮助你快速掌握数据库操作的核心技巧,是迈向后端开发的重要一步。

学习目标:

  • 理解什么是 MyBatis,为什么选择它。
  • 掌握 MyBatis 的基本环境搭建方法。
  • 学会如何使用 MyBatis 进行数据库操作。
  • 完成一个简单的增删改查示例项目。
  • 了解常见的新手问题及解决办法。

接下来的内容将围绕这些目标展开,带你从零开始一步步掌握 MyBatis 的基础应用。

第一章:环境准备

第一章:环境准备

在开始学习 MyBatis 之前,我们需要先准备好开发环境。本章节会引导你安装和配置必要的软件工具,包括 Java、MySQL、IDEA 和 Maven,确保你的计算机具备运行 MyBatis 示例程序的基础条件。

Step 1:安装 Java

MyBatis 是基于 Java 的框架,因此我们首先需要确保电脑上已经安装了 Java 开发环境。目前推荐使用 Java 8 或以上版本,因为它在兼容性和稳定性方面表现良好。

安装步骤:

  1. 访问 Oracle JDK 下载页面,选择适合你操作系统的 JDK 版本进行下载(注意选择正确的系统架构,如 Windows x64、MacOS 或 Linux)。
  2. 双击安装文件并按照提示完成安装。
  3. 打开命令行工具(Windows 上为 CMD,Mac/Linux 上为 Terminal),输入以下命令检查是否安装成功:
java -version
javac -version

如果你看到了类似下面的输出,则表示 Java 已成功安装:

java version "1.8.0_301"
Java(TM) SE Runtime Environment (build 1.8.0_301-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.301-b09, mixed mode)

Step 2:安装 MySQL

MyBatis 需要一个数据库来存储数据,这里我们选择使用 MySQL,这是一个广泛使用的开源关系型数据库管理系统。

安装步骤:

  1. 前往 MySQL官网,选择适合你系统的安装包下载。
  2. 双击安装文件,运行 MySQL Installer,按照向导逐步安装(建议选择默认配置即可)。
  3. 在安装过程中,请记住你设置的 root 用户密码(这将是后续连接数据库的关键)。
  4. 安装完成后,在命令行输入以下命令测试是否可以登录:
mysql -u root -p

输入你设定的密码后,如果进入了 MySQL 控制台(看到 mysql> 提示符),则说明安装成功。你可以输入以下命令退出:

exit;

Step 3:安装 IntelliJ IDEA

IntelliJ IDEA 是一款功能强大的 Java 集成开发环境(IDE),可以帮助我们高效编写和调试 Java 代码。我们将使用其社区版来进行 MyBatis 学习。

安装步骤:

  1. 打开浏览器访问 IntelliJ IDEA 官网
  2. 根据操作系统选择 IntelliJ IDEA Community Edition(免费版本)下载。
  3. 运行安装程序,按照指引完成安装。
  4. 启动 IDEA 并进入欢迎界面,稍后我们会创建第一个 MyBatis 项目。

Step 4:安装 Maven

Maven 是一个用于自动化构建 Java 项目的工具,它能帮助我们轻松管理依赖库,包括 MyBatis 和 MySQL 驱动等。

安装步骤:

  1. 访问 Maven 官网,下载最新版本的 Apache Maven ZIP 文件。
  2. 解压 ZIP 文件到某个固定目录,例如 C:\Program Files\Apache\maven(Windows)或 /opt/maven(Linux/Mac)。
  3. 设置环境变量:
    • Windows
      • 新建系统变量 MAVEN_HOME,值为你解压 Maven 的路径(如 C:\Program Files\Apache\maven)。
      • 编辑 Path 变量,新增 %MAVEN_HOME%\bin
    • Linux/Mac
      • 编辑 .bashrc.zshrc 文件,加入以下内容:
        export MAVEN_HOME=/opt/maven
        export PATH=$PATH:$MAVEN_HOME/bin
        
      • 保存文件后执行 source ~/.bashrcsource ~/.zshrc 刷新配置。
  4. 在命令行中输入以下命令验证安装是否成功:

服务器部署方案-1

mvn -v

你应该看到类似于以下输出的信息:

Apache Maven 3.8.6 (84538499d64970c0e00bdffdc15b112a5f8c3b99)
Maven home: /opt/maven
Java version: 1.8.0_301, vendor: Oracle Corporation, runtime: /usr/lib/jvm/java-8-openjdk-amd64/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "5.15.0-48-generic", arch: "amd64", family: "unix"

恭喜!你已经完成了所有必要的环境准备工作,接下来我们可以正式开始学习 MyBatis 了。

第二章:MyBatis的核心概念

第二章:MyBatis的核心概念

MyBatis 作为一个优秀的 ORM(Object Relational Mapping,对象关系映射)框架,主要通过几个关键组件来实现数据库操作的便捷性。为了更好地理解和使用 MyBatis,我们需要先了解它的几个核心概念:SqlSessionFactoryBuilderSqlSession、以及 Mapper 文件的作用。

1. SqlSessionFactoryBuilder 和 SqlSessionFactory

SqlSessionFactoryBuilder 是 MyBatis 的起点,它的作用是从配置文件(通常是 mybatis-config.xml)中读取信息,构建一个 SqlSessionFactory 实例。这个工厂类一旦创建完成,就可以用来生成用于执行 SQL 语句的 SqlSession 对象。

简单来说,SqlSessionFactoryBuilder 就像是一个“工厂建造者”,它根据图纸(配置文件)打造了一个可以生产“车间”(SqlSession)的“工厂”(SqlSessionFactory)。

使用示例:

// 读取 mybatis-config.xml 配置文件
String resource = "mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);

// 创建 SqlSessionFactory
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

在这个例子中,我们首先加载了 mybatis-config.xml 配置文件,然后通过 SqlSessionFactoryBuilder 构建出 SqlSessionFactory。整个过程就像在按说明书组装一台机器,最终得到了一个可用的工厂。

2. SqlSession:执行 SQL 的“车间”

有了 SqlSessionFactory 后,我们可以通过它获取 SqlSession 对象。这个对象是我们与数据库交互的主要接口,它提供了执行 SQL 查询、插入、更新和删除的方法。

你可以把 SqlSession 想象成一个“生产车间”,里面有很多“工人”(Mapper 方法)可以直接根据指令(SQL 映射文件中的定义)去操作数据库。

使用示例:

try (SqlSession session = sqlSessionFactory.openSession()) {
    // 获取 Mapper 并调用相应方法
    UserMapper mapper = session.getMapper(UserMapper.class);
    
    // 假设有一个查询用户的方法
    User user = mapper.selectUserById(1);
    System.out.println(user.getName());
}

在这段代码中,我们打开一个 SqlSession,并通过它获取对应的 UserMapper 接口实例。接着调用 selectUserById 方法,执行查询操作并打印用户名称。整个流程就像是在车间里安排了一名员工去完成任务。

需要注意的是,使用完 SqlSession 后必须关闭它,以避免资源泄漏。在上述代码中,我们使用了 try-with-resources 语法,这样可以保证会话在使用完毕后自动关闭。

3. Mapper 文件:SQL 映射规则

Mapper 文件是 MyBatis 中最重要的部分之一,它负责定义 SQL 语句和 Java 对象之间的映射关系。通常,每个 Mapper 文件都会对应一个接口(例如 UserMapper.java),并在 XML 文件中定义具体的 SQL 查询和操作。

我们可以把 Mapper 文件理解为“操作说明书”,里面详细记录了每条 SQL 应该如何执行,以及执行后的结果应该如何转换为 Java 对象。

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

在这个例子中,<select> 标签定义了一个 SQL 查询,id="selectUserById" 表示这是 UserMapper 接口中 selectUserById 方法对应的 SQL。resultType 属性指定了该查询返回的对象类型,即 com.example.model.User

小结

  • SqlSessionFactoryBuilder:根据配置文件创建 SqlSessionFactory
  • SqlSessionFactory:是一个工厂类,用于生成 SqlSession
  • SqlSession:用于执行 SQL 查询和事务控制。
  • Mapper 文件:定义 SQL 语句和 Java 对象的映射关系。

现在你已经了解了 MyBatis 的几个核心组件及其作用,接下来我们将通过一个实战项目来加深理解。

第三章:实战项目——实现一个简单的增删改查(CRUD)功能

第三章:实战项目——实现一个简单的增删改查(CRUD)功能

现在我们已经掌握了 MyBatis 的基本概念和环境配置,接下来我们将通过一个完整的实战项目,来练习 MyBatis 中最常用的四个功能:增(Insert)、删(Delete)、改(Update)、查(Select)

我们将以“用户管理”作为我们的示例场景,创建一个简单的用户管理系统,实现用户的添加、查询、更新和删除功能。整个过程会涵盖 MyBatis 的基本使用方式,并展示如何编写 SQL 映射文件和调用对应的 Java 接口。

步骤一:创建项目结构

首先,我们在 IntelliJ IDEA 中创建一个新的 Maven 项目,并引入 MyBatis 和 MySQL 相关的依赖。

1.1 创建 Maven 项目

  • 打开 IDEA,点击 “Create New Project”。
  • 选择 “Maven” 类型,并确保选择了 JDK 8 或更高版本。
  • 输入 GroupId(例如 com.example),ArtifactId(例如 mybatis-demo)。
  • 点击 Finish,等待项目初始化完成。

1.2 添加依赖项

打开 pom.xml 文件,在 <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.30</version>
</dependency>

<!-- 日志框架(可选) -->
<dependency>
    <groupId>log4j</groupId>
    <artifactId>log4j</artifactId>
    <version>1.2.17</version>
</dependency>

保存文件后,Maven 会自动下载这些依赖库。


步骤二:配置 MyBatis

接下来我们需要配置 MyBatis 的全局配置文件 mybatis-config.xml,并设置数据库连接信息。

2.1 创建 mybatis-config.xml 文件

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

    <!-- Mapper 文件注册 -->
    <mappers>
        <mapper resource="mapper/UserMapper.xml"/>
    </mappers>
</configuration>

请将 urlusernamepassword 替换为你自己的数据库信息。


步骤三:创建实体类和 Mapper 接口

为了与数据库表建立映射关系,我们需要创建一个 Java 实体类 User,并定义一个对应的 Mapper 接口。

3.1 创建 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;

    // Getter 和 Setter 方法
    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; }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", email='" + email + '\'' +
                '}';
    }
}

3.2 创建 UserMapper.java 接口

src/main/java/com/example/mapper 包下创建 UserMapper.java

package com.example.mapper;

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

public interface UserMapper {
    // 查询所有用户
    List<User> selectAllUsers();

    // 按 ID 查询用户
    User selectUserById(int id);

    // 插入用户
    void insertUser(User user);

    // 更新用户
    void updateUser(User user);

    // 删除用户
    void deleteUser(int id);
}

步骤四:编写 SQL 映射文件

现在我们创建对应的 XML 映射文件来定义具体的 SQL 操作。

4.1 创建 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="com.example.mapper.UserMapper">

    <!-- 查询所有用户 -->
    <select id="selectAllUsers" resultType="com.example.model.User">
        SELECT * FROM users
    </select>

    <!-- 按 ID 查询用户 -->
    <select id="selectUserById" parameterType="int" resultType="com.example.model.User">
        SELECT * FROM users WHERE id = #{id}
    </select>

    <!-- 插入用户 -->
    <insert id="insertUser" parameterType="com.example.model.User">
        INSERT INTO users (name, email)
        VALUES (#{name}, #{email})
    </insert>

    <!-- 更新用户 -->
    <update id="updateUser" parameterType="com.example.model.User">
        UPDATE users
        SET name = #{name}, email = #{email}
        WHERE id = #{id}
    </update>

    <!-- 删除用户 -->
    <delete id="deleteUser" parameterType="int">
        DELETE FROM users WHERE id = #{id}
    </delete>

</mapper>

步骤五:编写测试类

最后,我们创建一个 Main.java 类来测试各个数据库操作。

5.1 创建 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) throws IOException {
        // 加载配置文件
        String resource = "mybatis-config.xml";

评论 0

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