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

分支开太多了
2025-06-22 11:24
阅读 793

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

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

在开发Java Web应用时,我们常常需要和数据库打交道。比如用户注册、登录、商品购买等操作,都需要把数据存储或读取到数据库中。而直接使用JDBC操作数据库虽然可行,但代码重复多、维护难、效率低。

MyBatis 是什么?
MyBatis 是一个 Java 的“持久层框架”,它帮助我们简化与数据库的交互过程,让我们更专注于业务逻辑,而不是繁琐的 JDBC 编写。

MyBatis 用来做什么?

  • 简化数据库访问,告别大量重复的 JDBC 操作
  • 将 SQL 写在外部配置文件中,便于管理和修改
  • 实现 Java 对象与数据库表之间的映射(ORM)
  • 支持动态 SQL,灵活构建查询语句

换句话说,有了 MyBatis,我们可以用更简洁的方式,安全高效地操作数据库。


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

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

为了让你能够动手实践,下面将详细介绍如何从头搭建一个包含 MyBatis 的 Java 项目。

1. 安装 Java 开发环境

确保你已经安装以下工具:

  • JDK 1.8 或更高版本
  • IDE(推荐 IntelliJ IDEA 或 Eclipse)
  • Maven 构建工具

📌 检查是否安装成功:
打开终端/命令行输入 java -versionmvn -v 查看版本信息

2. 创建 Maven 项目

在 IntelliJ IDEA 中:

  1. File → New → Project → Maven
  2. 输入 GroupId(如:com.example)、ArtifactId(如:mybatis-demo
  3. 创建完成后会在项目根目录生成 pom.xml

3. 添加 MyBatis 依赖

打开 pom.xml 文件,在 <dependencies> 标签内添加以下内容:

<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.5.13</version>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.33</version>
</dependency>

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

4. 配置数据库连接信息

创建一个名为 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/testdb?useSSL=false&amp;serverTimezone=UTC"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>

    <!-- 映射文件位置 -->
    <mappers>
        <mapper resource="mapper/UserMapper.xml"/>
    </mappers>
</configuration>

请根据你本地数据库情况修改 urlusernamepassword

现在,我们的开发环境就准备好了!


核心概念:MyBatis 的关键术语解释

核心概念:MyBatis 的关键术语解释

初学 MyBatis,可能会遇到一些新词汇。不要担心,下面用通俗的语言来帮你理解这些关键词。

1. Mapper 接口 & XML 文件

  • Mapper接口:Java 接口中定义我们要执行的数据库方法,例如:List<User> getAllUsers();
  • XML 映射文件:在这个文件中编写具体的 SQL 查询语句,并与接口方法绑定起来

举个例子:

假设有一个 UserMapper.java 接口:

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

对应 UserMapper.xml 文件中的 SQL:

<mapper namespace="com.example.mapper.UserMapper">
    <select id="getAllUsers" resultType="com.example.model.User">
        SELECT * FROM users;
    </select>
</mapper>

通过 namespace + id,就能把接口方法和 SQL 语句一一对应起来。

2. SqlSessionFactory 和 SqlSession

这两个类是 MyBatis 的核心对象:

  • SqlSessionFactory:用于创建 SqlSession,通常在整个程序生命周期中只需要一个实例。
  • SqlSession:代表一次数据库会话,可以执行 SQL、获取 Mapper。

初始化代码示例:

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

3. 动态 SQL

这是 MyBatis 的一大亮点。你可以根据条件拼接 SQL,比如:

<select id="findUsers" parameterType="map" resultType="User">
  SELECT * FROM users WHERE 1=1
  <if test="name != null">
    AND name LIKE CONCAT('%', #{name}, '%')
  </if>
  <if test="age != null">
    AND age > #{age}
  </if>
</select>

上面的代码表示:如果 name 不为空,则加上模糊匹配条件;如果 age 不为 null,则筛选大于某个年龄。


实战项目:跟着教程做个小功能

接下来我们将以“用户管理系统”的一个小功能为例,一步一步完成 MyBatis 的基本使用。

步骤 1:创建数据库和用户表

运行以下 SQL 在 MySQL 中创建数据库和表:

CREATE DATABASE testdb;

USE testdb;

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

步骤 2:创建实体类

src/main/java/com/example/model 下创建 User.java

package com.example.model;

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

    // Getters and Setters
}

步骤 3:创建 Mapper 接口

创建接口 UserMapper.java

package com.example.mapper;

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

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

步骤 4:创建 Mapper 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.mapper.UserMapper">
    <select id="getAllUsers" resultType="com.example.model.User">
        SELECT * FROM users;
    </select>
</mapper>

负载均衡配置-1

步骤 5:编写主程序调用 MyBatis

创建 App.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;

import java.io.InputStream;
import java.util.List;

public class App {
    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 userMapper = session.getMapper(UserMapper.class);
            List<User> users = userMapper.getAllUsers();

            for (User user : users) {
                System.out.println(user.getName() + " - " + user.getEmail());
            }
        }
    }
}

运行结果

控制台应输出:

Tom - tom@example.com
Jerry - jerry@example.com

恭喜!你完成了第一个使用 MyBatis 的小项目。


常见问题解答

以下是一些新手常见问题及解决办法:

❓Q1:提示找不到 Mapper?

  • ✅检查 mybatis-config.xml 中是否正确配置了 mapper 路径
  • ✅确认接口全路径与 XML 的 namespace 是否一致

❓Q2:查询返回结果为空?

  • ✅检查字段名与数据库列名是否一致(区分大小写)
  • ✅可尝试使用 resultMap 自定义字段映射

❓Q3:MySQL 报错“Public Key Retrieval is not allowed”?

  • ✅修改 url 添加 allowPublicKeyRetrieval=true,例如:
<property name="url" value="jdbc:mysql://localhost:3306/testdb?useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true"/>

❓Q4:编译时报 Resources cannot be resolved

  • ✅确保引入了 mybatis 包,且未手动删除相关 import 语句

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

你现在掌握了 MyBatis 的基础知识,能进行基本的数据库操作了。接下来建议学习:

  • 💡进阶功能:动态 SQL、事务管理、缓存机制
  • 🔗结合 Spring Boot 使用 MyBatis(推荐学习 Spring Boot 整合 MyBatis)
  • 🧪练习 CRUD 操作,如添加用户、更新邮箱、删除用户等
  • 🛠查阅官方文档(https://mybatis.org)深入了解原理

不断敲代码才能掌握扎实技能。建议自己动手做一个完整的用户管理系统或图书管理系统练手。


希望这篇《MyBatis 基础教程》对你有帮助,让你顺利入门这个流行的 Java 持久层框架!如果你对某个知识点还不清楚,欢迎留言交流 😊

评论 0

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