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

提交前先拜佛
2025-06-22 05:42
阅读 498

一、什么是MyBatis?它是用来做什么的?

一、什么是MyBatis?它是用来做什么的?

在我们正式开始之前,先来了解一下 MyBatis 是什么。

简单来说,MyBatis 是一个 Java 的数据库操作框架。它可以帮助我们更轻松地操作数据库,比如说对数据进行增删改查(也就是常说的 CRUD 操作)。

你可能会问:“那不是可以用 JDBC 做吗?”没错,JDBC 是 Java 提供的操作数据库的基础方式。但使用 JDBC 写代码会非常繁琐,需要写很多重复性的代码,比如打开连接、处理结果集等等。

MyBatis 就是为了解决这个问题而诞生的。它简化了数据库操作,让你把注意力集中在 SQL 上,而不是重复性代码上。

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

API接口文档-1

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

要开始学习MyBatis,我们需要准备好以下工具和依赖:

所需软件/工具:

  • JDK(推荐1.8及以上)
  • IDE(如 IntelliJ IDEA 或 Eclipse)
  • MySQL 数据库(或者其他你喜欢的关系型数据库)
  • Maven(用于管理项目依赖)

步骤1:创建Maven项目

  1. 打开IDE(以IntelliJ为例),选择“Create New Project”。
  2. 选择 Maven 项目类型。
  3. 输入 GroupId(比如 com.example)和 ArtifactId(比如 mybatis-demo)。
  4. 确认后生成项目结构。

步骤2:添加MyBatis和MySQL驱动依赖

在你的 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>
</dependencies>

然后点击“Reimport”,Maven会自动下载这些依赖包。

步骤3:配置数据库连接信息

在项目的 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/test_db?useSSL=false&amp;serverTimezone=UTC"/>
        <property name="username" value="root"/>
        <property name="password" value="your_password"/>
      </dataSource>
    </environment>
  </environments>
  
  <!-- 映射文件位置 -->
  <mappers>
    <mapper resource="UserMapper.xml"/>
  </mappers>
</configuration>

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

三、核心概念:理解MyBatis的几个关键点

三、核心概念:理解MyBatis的几个关键点

接下来我们要了解 MyBatis 中一些非常重要的概念,它们是你编写 MyBatis 程序的基础。

1. SqlSessionFactory 和 SqlSession

这两个对象就像“工厂”一样,负责帮你创建与数据库交互的对象。

  • SqlSessionFactory:相当于一个工厂类,它是通过 mybatis-config.xml 配置创建的。
  • SqlSession:相当于一个数据库连接对象,你可以用它来执行SQL语句。

示例代码:

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

上面的代码就建立了与数据库之间的桥梁。

2. Mapper 接口 和 XML映射文件

这是 MyBatis 的核心机制之一 —— 将接口方法绑定到SQL语句

举个例子:

UserMapper.java(接口)

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

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>

解释:

  • namespace 对应接口的全限定名
  • id 对应接口中的方法名
  • resultType 表示返回的数据类型(User实体类)

这样,当你调用 userMapper.getAllUsers() 时,MyBatis就会自动去执行对应的SQL并返回结果。

3. 实体类(Model)

这个就是我们常见的 POJO 类(简单的Java对象),通常和数据库表对应。

例如:

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

    // getter/setter省略
}

四、实战项目:实现一个查询用户列表的功能

现在我们来动手实践一个小项目 —— 查询所有用户信息。

第一步:建表

在你的 MySQL 数据库中创建一个 users 表:

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

-- 插入测试数据
INSERT INTO users (name, email) VALUES ('张三', 'zhangsan@example.com');
INSERT INTO users (name, email) VALUES ('李四', 'lisi@example.com');

第二步:编写实体类

创建 User.java

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

    // getter 和 setter 方法(建议自动生成)
}

第三步:编写Mapper接口和XML文件

创建接口 UserMapper.java

package com.example.mapper;

import java.util.List;

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

创建对应的 UserMapper.xml 文件:

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

别忘了将该XML文件路径配置到 mybatis-config.xml<mappers> 标签中:

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

第四步:编写测试类

创建 MainApp.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 MainApp {
    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("ID: " + user.getId() + ", Name: " + user.getName() + ", Email: " + user.getEmail());
            }
        }
    }
}

运行这个类,你会看到控制台输出从数据库中查询出来的用户信息!

五、常见问题解答(FAQ)

下面是一些初学者常遇到的问题及解决办法:

✅ Q1:启动时报错“ClassNotFound”或“No suitable driver”

这通常是由于没有正确引入依赖导致的。请检查:

  • mysql-connector-java 是否添加
  • 版本是否适合你的JDK和MySQL数据库
  • Maven是否重新导入依赖(可以尝试刷新依赖)

✅ Q2:找不到UserMapper.xml

检查以下几点:

  • xml 文件是否放在 resources 目录下
  • mybatis-config.xml 中的 <mapper> 路径是否正确
  • namespace 是否与接口的全限定名一致

✅ Q3:执行SQL报错“Unknown column”

说明你在SQL中引用了一个不存在的字段,请检查:

  • 实体类属性与数据库列名是否匹配
  • 如果不一致,可以使用 <resultMap> 做字段映射

✅ Q4:为什么不用写try-catch也能运行?

上面的代码中使用了 “try-with-resources” 结构,这是 Java 7+ 的特性,能自动关闭资源,不需要手动写 finally 关闭 sqlSession。

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

缓存策略对比-2

恭喜你完成本教程!你已经掌握了 MyBatis 的基本使用方法。接下来你可以学习以下几个方向来继续深入:

1. 学习动态SQL

MyBatis 强大的地方就在于它的动态 SQL 功能,例如 <if><choose><foreach> 等标签,能根据参数不同灵活构建SQL语句。

2. 掌握关联查询

学习如何进行多表联查、一对一、一对多等复杂关系的处理。

3. 使用注解代替XML

除了XML方式,MyBatis 还支持用注解(@Select、@Insert等)来写SQL,适合小项目或快速开发。

4. 整合Spring Boot

当你要开发 Web 项目时,常常会把 MyBatis 与 Spring Boot 结合使用,这也是企业级开发中非常常见的组合。


如果你坚持每一步都动手做了,那么你现在已经有能力写出一个完整的数据库操作程序了。接下来的学习只需要一点点扩展知识,就能应对大多数需求啦!

继续加油,成为一个真正的Java后端工程师吧!🔥

评论 0

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