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

孙明
2025-06-24 15:14
阅读 273

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

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

在Java Web开发中,经常需要与数据库打交道。我们写的代码要能够保存数据、查询数据、修改数据和删除数据,这些操作统称为CRUD(创建、读取、更新、删除)

过去,我们需要手动编写大量的JDBC代码来连接数据库,并且还要处理结果集的解析。不仅写起来麻烦,还不容易维护。于是,人们开发了各种ORM框架来帮助简化这个过程。

🌟什么是MyBatis?

MyBatis是一个优秀的持久层框架(Persistence Framework),主要用于帮助Java程序操作数据库。它的核心思想是:

  • 让开发者专注于SQL语句的编写;
  • 将执行结果自动映射为Java对象;
  • 避免重复的JDBC底层操作(如连接管理、异常处理等)。

💡小贴士: ORM全称Object Relational Mapping,即对象关系映射,就是把数据库中的表结构,自动转成Java类的属性。

🔧为什么选择MyBatis?

  • 比较轻量级,学习成本低;
  • 可以灵活控制SQL语句;
  • 不强制使用某种设计模式,自由度高;
  • 非常适合对SQL有较高要求的项目。

接下来,我们就从零开始,带你一步步上手MyBatis!


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

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

要使用MyBatis,我们需要准备好以下几样东西:

✅1. Java开发环境(JDK)

推荐安装 JDK 17 或以上版本。确保你能在命令行中运行以下命令看到版本号:

java -version

如果没有安装,可以从Oracle官网下载安装包。


✅2. 数据库(MySQL示例)

我们用常见的MySQL作为演示数据库。你可以选择安装本地MySQL,或者使用Docker快速启动。

安装完成后,创建一个简单的数据库用于练习:

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');
INSERT INTO users (name, email) VALUES ('Jerry', 'jerry@example.com');

✅3. IDE(推荐使用 IntelliJ IDEA)

IntelliJ IDEA是目前最流行的Java开发工具,社区版完全免费。你可以从官网下载安装。


✅4. 构建工具:Maven

我们将使用Maven来管理依赖和构建项目。如果你不会Maven也没关系,只要按下面步骤操作即可。


✅5. 创建Maven项目

在IDEA中创建一个新的Maven项目:

  1. 打开IDEA → File → New → Project
  2. 选择 Maven → Create from archetype
  3. 选择 maven-archetype-quickstart
  4. 输入 GroupId(比如 com.example)、ArtifactId(比如 mybatis-demo
  5. 完成创建

✅6. 添加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.28</version>
</dependency>

⚠️注意:如果使用MySQL 8.0,请确保JDBC驱动版本也匹配。

保存后IDE会自动下载相关jar包。


✅7. 准备MyBatis配置文件

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

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

请根据你自己的数据库信息修改用户名、密码和URL。


三、核心概念讲解:MyBatis中的关键组成部分

三、核心概念讲解:MyBatis中的关键组成部分

为了更好地理解MyBatis的工作原理,我们需要了解几个核心概念:

组件 作用
SqlSessionFactory MyBatis的入口,用于创建数据库会话对象
SqlSession 数据库会话对象,用来发送SQL并获取结果
Mapper接口 接口方法对应一条SQL语句
XML映射文件 描述SQL语句及其结果映射规则

💡简单说:MyBatis通过接口定义方法名,然后通过XML或注解实现具体SQL逻辑。


1️⃣ 创建Java实体类

我们在 src/main/java/com/example 下新建一个 User.java 类:

package com.example;

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

    // Getter 和 Setter 方法(略)
    // 可以右键 Generate → Getter and Setter 自动生成
    
    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", email='" + email + '\'' +
                '}';
    }
}

2️⃣ 创建Mapper接口

src/main/java/com/example 下创建接口 UserMapper.java

package com.example;

import java.util.List;

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

这个接口只是一个模板,还没有实际功能,真正的SQL要写在XML里。


3️⃣ 创建XML映射文件

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.UserMapper">
    <select id="selectAllUsers" resultType="com.example.User">
        SELECT * FROM users
    </select>
</mapper>
  • namespace 必须和对应的Mapper接口路径一致
  • resultType 表示返回的数据类型,这里是我们定义的 User

四、实战项目:用MyBatis查询数据库中的用户信息

四、实战项目:用MyBatis查询数据库中的用户信息

现在我们要写一个完整的主程序,使用上面定义的接口查询所有用户。


步骤1:读取配置文件,获取SqlSessionFactory

package com.example;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.InputStream;

public class MyBatisApp {
    public static void main(String[] args) throws Exception {
        String resource = "mybatis-config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
        
        // 后续代码在这里
    }
}

步骤2:打开SqlSession,调用Mapper接口

try (SqlSession session = sqlSessionFactory.openSession()) {
    UserMapper mapper = session.getMapper(UserMapper.class);
    
    List<User> userList = mapper.selectAllUsers();

    for (User user : userList) {
        System.out.println(user);
    }
}

完整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> userList = mapper.selectAllUsers();

        for (User user : userList) {
            System.out.println(user);
        }
    }
}

输出结果示意:

User{id=1, name='Tom', email='tom@example.com'}
User{id=2, name='Jerry', email='jerry@example.com'}

恭喜你!你已经完成了第一个MyBatis应用!


五、常见问题解答(FAQ)

❓1. 运行时提示“无法加载驱动”?

答: 确保MySQL驱动已正确添加到 pom.xml 中,并重新刷新Maven依赖。同时检查 mybatis-config.xml 中的 driver 是否为 com.mysql.cj.jdbc.Driver(MySQL 8+)。


❓2. 查询结果为空,但数据库里明明有数据?

答: 先确认SQL是否正确,可以在Navicat等客户端里直接运行SQL验证;其次是字段名与Java类的属性名是否一致,例如数据库字段 user_name 与Java字段 userName 要一致,或者在XML中使用别名映射。


❓3. 报错:“mapper interface is not known to the MyBatis system.”?

答: 检查 mybatis-config.xml 中的 <mappers> 配置是否正确指向了你的XML文件,以及XML中的 namespace 是否与接口路径完全一致。


❓4. 使用MyBatis一定要写XML吗?

答: 不一定!MyBatis支持使用注解来替代XML文件。例如:

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

不过对于复杂SQL,还是建议使用XML更清晰。


六、下一步学习建议

现在你已经掌握了MyBatis的基本用法,包括:

  • 如何连接数据库
  • 如何定义Mapper接口和XML文件
  • 如何执行SQL并获取结果对象

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

🔹1. 学习MyBatis动态SQL

掌握 <if><foreach><choose> 等标签,实现更智能的SQL拼接。

🔹2. 学习MyBatis缓存机制

包括一级缓存(SqlSession级别)、二级缓存(Mapper级别),提高性能。

🔹3. 结合Spring Boot使用MyBatis

在企业级开发中,通常将MyBatis与Spring Boot集成使用,更加方便快捷。

🔹4. 多数据源切换与事务管理

学会在一个项目中使用多个数据库,以及如何开启事务控制。


总结

本教程从零开始带你一步一步搭建MyBatis环境,解释了核心概念并通过一个简单的查询项目进行实践。希望你能感受到MyBatis的简洁与强大。随着不断实践,你也会越来越熟练地使用它处理各种数据库操作。

💬新手提醒:不要急着记太多概念,先动手敲一遍代码,感受流程才是最重要的!


文末小彩蛋 🎁

📘推荐阅读文档:

祝你学有所成,码出精彩人生!🚀

评论 0

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