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

数据迁移苦工
2025-06-16 05:43
阅读 391

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

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

在开发一个Java项目时,我们常常需要和数据库打交道。比如,用户注册信息存到哪里?订单数据如何查询?这时候你就需要用到持久层技术

传统的做法是用JDBC写大量的数据库操作代码,例如连接数据库、拼接SQL语句、处理结果集等。不仅代码重复度高,而且容易出错。为了解决这个问题,Java开发者们发明了一些工具——它们被称为ORM框架(对象关系映射框架)

ORM的意思是,我们可以把数据库的一张表当作一个Java类来看,每一条记录就是一个Java对象。

而今天我们介绍的主角——MyBatis,就是这样一个非常流行的ORM框架。它的最大特点在于灵活且轻量级。它不像Hibernate那样完全封装SQL操作,而是给了你更高的自由度,非常适合熟悉SQL又想提高效率的开发者。

简单来说:

  • 使用MyBatis可以让你更轻松地操作数据库
  • 它可以帮你自动完成一些繁琐的底层操作,比如建立连接、执行SQL、映射结果集
  • 你只需要关注SQL本身即可

好了,现在我们就一起来动手学一学这个好东西吧!


环境准备:搭建MyBatis开发环境

环境准备:搭建MyBatis开发环境

要使用MyBatis,你需要准备好以下开发工具和库:

1. 安装JDK(Java Development Kit)

确保你的电脑已经安装了 JDK(建议1.8以上版本),可以通过命令查看版本:

java -version
javac -version

如果没安装,请去 Oracle官网 下载安装。

2. 安装IDE(推荐IntelliJ IDEA)

IntelliJ IDEA 是目前 Java 开发最常用的 IDE,支持 Maven 项目管理,使用起来非常方便。

你可以下载社区版:JetBrains官网

3. 添加MyBatis依赖(使用Maven)

在Java项目中,我们一般使用 Maven 或 Gradle 来管理依赖。

假设你创建了一个 Maven 项目,打开 pom.xml 文件,加入以下依赖:

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

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

保存后,Maven会自动下载相应的jar包。

4. 安装MySQL数据库(或者其他数据库)

你可以安装本地MySQL服务器,或者使用Docker启动一个MySQL实例。这里以本地为例:

  • 去官网下载安装 MySQL Community Server
  • 安装完成后,使用Navicat或MySQL Workbench等工具连接测试一下

接下来我们将使用数据库名为 mybatis_demo 的数据库,并添加一张测试表。


核心概念:理解MyBatis的几个关键术语

核心概念:理解MyBatis的几个关键术语

在开始写代码前,我们需要理解几个基本的概念:

✅ 1. SqlSessionFactoryBuilder 和 SqlSessionFactory

这是MyBatis的入口类。

  • SqlSessionFactoryBuilder:用于读取配置文件,生成工厂对象
  • SqlSessionFactory:负责创建 SqlSession 对象

✅ 2. SqlSession

这是与数据库交互的核心接口。

  • 你可以通过它获取Mapper接口的实现类
  • 可以直接执行SQL语句
  • 负责事务管理和连接池管理

✅ 3. Mapper接口 + XML映射文件

这是MyBatis中最核心的部分。

  • Mapper是一个Java接口,定义方法,每个方法对应一条SQL语句
  • XML文件里写对应的SQL逻辑和参数映射

示例:

// 接口
public interface UserMapper {
    User selectUser(int id);
}

// XML文件
<select id="selectUser" resultType="User">
    SELECT * FROM users WHERE id = #{id}
</select>

✅ 4. 配置文件 mybatis-config.xml

MyBatis的所有全局设置都在这个文件中定义:

  • 数据源配置(数据库地址、账号密码)
  • 别名设置
  • 映射文件路径

实战项目:做一个简单的查询功能

实战项目:做一个简单的查询功能

我们来实战一个小项目:实现从数据库中查询一个用户的完整信息。

第一步:建库建表

登录MySQL,创建数据库和表:

CREATE DATABASE mybatis_demo;

USE mybatis_demo;

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');

第二步:创建Java实体类

创建一个类 User.java,表示用户信息:

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 + '\'' +
                '}';
    }
}

第三步:编写Mapper接口

新建一个接口 UserMapper.java

import java.util.List;

public interface UserMapper {
    User selectUserById(int id);   // 查询单个用户
}

第四步:编写Mapper XML文件

在resource目录下创建映射文件 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="selectUserById" resultType="com.example.model.User">
        SELECT * FROM users WHERE id = #{id}
    </select>
</mapper>

注意:这里的 namespace 要对应你的接口路径。

第五步:配置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_demo?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>

请将 usernamepassword 替换为你自己的数据库账户信息。

第六步:编写测试类运行查询

最后我们来编写一个测试类:

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;

public class TestMyBatis {
    public static void main(String[] args) throws IOException {
        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);
            User user = mapper.selectUserById(1);
            System.out.println(user);
        }
    }
}

运行这段代码,如果控制台输出了刚才插入的 Tom 用户的信息,那说明一切正常!


常见问题解答(FAQ)

❓为什么程序报错提示找不到mapper文件?

可能是路径配置错误。请检查:

  • XML文件是否真的放在resources目录下
  • <mapper>标签中的路径是否正确(相对于resources)

❓为什么返回的User对象属性为空?

可能有以下几个原因:

  • SQL字段名和Java类的属性不匹配
  • 没有给resultType指定正确的类全限定名
  • 表中确实没有该ID的数据

❓为什么数据库连接不上?

检查以下几个点:

  • 数据库是否启动
  • 配置文件中的用户名、密码是否正确
  • JDBC URL 是否正确,特别是端口号、数据库名

❓MyBatis一定要配合XML吗?

不是必须的!MyBatis支持注解方式。例如:

@Select("SELECT * FROM users WHERE id = #{id}")
User selectUserById(int id);

不过对于复杂SQL来说,XML方式可读性更高,适合团队协作。


学习建议:下一步怎么走?

你现在已经掌握了MyBatis的基础知识,能完成最基本的数据库查询功能。那么下一步该怎么做呢?以下是几个学习方向建议:

✅ 1. 学习增删改操作

除了查询,我们还需要做插入、更新、删除等操作。可以尝试自己写一个用户注册功能。

✅ 2. 掌握动态SQL

MyBatis提供了一套强大的动态SQL语法,比如 <if><foreach>,可以让你根据条件生成不同的SQL语句。

✅ 3. 了解缓存机制

MyBatis内置一级缓存(默认开启)和二级缓存(需手动配置)。学会合理使用缓存可以提升系统性能。

✅ 4. 结合Spring Boot使用MyBatis

MyBatis单独使用虽然方便,但实际企业项目中更多是结合 Spring Boot 使用。Spring Boot 提供了对MyBatis的自动配置,集成更加高效。


结束语

恭喜你完成了这篇《MyBatis基础教程》的学习!你现在已经具备使用MyBatis进行数据库操作的能力,接下来可以继续深入学习它的高级特性,也可以结合Spring Boot做一个完整的Web项目。

记住一句话:

“实践是最好的老师”。
多敲代码、多试错、多总结,你就一定能掌握MyBatis!

如果你喜欢这样的教学风格,欢迎继续关注后续的进阶教程系列哦 😊


🎯 本教程共计约 2961字,内容涵盖MyBatis环境搭建、核心概念、代码示例和常见问题,适用于零基础初学者快速上手。

评论 0

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