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

云原生笔记本
2025-06-17 04:51
阅读 546

开篇:MyBatis是什么?我能用它做什么?

开篇:MyBatis是什么?我能用它做什么?

在Java开发中,我们经常需要和数据库打交道。例如用户登录、商品下单、查询数据等操作,都需要从数据库中读写信息。

但是直接使用JDBC(Java Database Connectivity)来操作数据库,代码非常繁琐,且容易出错。于是出现了许多ORM框架,来简化这一过程。其中 MyBatis 就是一个非常流行的选择。

什么是ORM?

ORM(Object Relational Mapping,对象关系映射)是将 Java 对象与数据库中的表进行映射的技术。简单地说,就是让你可以用面向对象的方式去操作数据库,而不需要频繁写 SQL 语句。

MyBatis有什么特点?

  • 灵活:允许你自定义 SQL。
  • 轻量:不强制你完全脱离 SQL,适合对性能有要求的项目。
  • 易学易用:学习门槛低,适合初学者入门 ORM 框架。

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

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

为了顺利学习 MyBatis,你需要先准备好以下开发环境:

1. 安装 JDK 和 Maven

  • JDK:建议使用 JDK 8 或更高版本。
  • Maven:用来管理项目的依赖(也就是需要用到的库文件)。

你可以通过命令行检查是否安装成功:

java -version
mvn -v

2. 创建Maven项目

使用IDEA或者手动创建一个 Maven 项目,在 pom.xml 中添加 MyBatis 的依赖和 MySQL 驱动依赖:

<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.26</version>
    </dependency>
</dependencies>

3. 准备MySQL数据库

假设我们创建了一个名为 test_db 的数据库,并新建了一张用户表:

CREATE DATABASE test_db;

USE test_db;

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

插入几条测试数据:

INSERT INTO user (name, email) VALUES ('张三', 'zhangsan@example.com');
INSERT INTO user (name, email) VALUES ('李四', 'lisi@example.com');

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

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

要使用 MyBatis,你需要先了解几个基本概念:

1. SqlSessionFactory

这是 MyBatis 的核心工厂类,用来创建一个数据库连接会话。通常在整个应用程序中只初始化一次。

2. SqlSession

它代表一次数据库连接,可以执行SQL语句、提交事务、回滚事务等。

3. Mapper接口 + XML映射文件

这是 MyBatis 的精华所在。你可以写一个接口,比如 UserMapper,然后通过 XML 文件告诉 MyBatis 如何执行对应的 SQL。

示例:接口与映射文件配对

接口文件 UserMapper.java

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

XML文件 UserMapper.xml

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

这样你就可以通过调用 userMapper.getAllUsers() 来获取所有用户的数据,而不用每次都写JDBC代码!

4. resultMap 和 resultType

这两个是用来指定 SQL 查询结果应该转换成哪种 Java 类型。

  • resultType:如果数据库字段和Java类属性名一致时使用。
  • resultMap:当不一致时,可以自己定义映射关系。

实战项目:实现一个简单的“用户管理系统”

我们现在做一个小项目:查询并输出所有用户的信息。

第一步:创建 User 实体类

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

第二步:创建 UserMapper 接口

package com.example.mapper;

import java.util.List;

import com.example.model.User;

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

第三步:编写 UserMapper.xml 文件

放在 resources/mapper/ 目录下:

<?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 user
    </select>
</mapper>

第四步:配置 mybatis-config.xml

这是 MyBatis 的全局配置文件,放在 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/test_db?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>

第五步:主程序中使用 MyBatis 查询数据

package com.example;

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

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import com.example.mapper.UserMapper;
import com.example.model.User;

public class App {
    public static void main(String[] args) {
        // 1. 加载MyBatis配置文件
        InputStream inputStream = App.class.getClassLoader().getResourceAsStream("mybatis-config.xml");
        
        // 2. 创建SqlSessionFactory
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

        // 3. 打开SqlSession
        try (SqlSession session = sqlSessionFactory.openSession()) {
            // 4. 获取Mapper接口
            UserMapper mapper = session.getMapper(UserMapper.class);

            // 5. 调用方法查询数据
            List<User> users = mapper.getAllUsers();

            // 6. 输出结果
            for (User user : users) {
                System.out.println(user);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

运行后你会看到控制台输出类似这样的信息:

User{id=1, name='张三', email='zhangsan@example.com'}
User{id=2, name='李四', email='lisi@example.com'}

恭喜你!你已经完成了第一个 MyBatis 程序!

常见问题解答

Q1:为什么我运行时报错 “Invalid bound statement (not found): com.example.mapper.UserMapper.getAllUsers”

:这个错误通常是由于没有正确加载 XML 文件造成的。请检查以下几点:

  • XML 文件是否放到 resources 下的正确路径。
  • mybatis-config.xml<mapper> 是否引用了正确的 XML 文件。
  • XML 文件里的 namespace 是否和接口的全限定名一致。

Q2:MyBatis 报错说找不到数据库驱动?

:请确认你在 pom.xml 中已经引入了 MySQL 的驱动依赖,并确保 JDBC URL、用户名和密码都正确。

Q3:User类中的属性和表字段名不同,会不会影响查询?

:如果你使用的是 resultType 并且字段名不一致,会导致无法自动映射。此时你应该使用 resultMap 自定义映射规则。

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

掌握以上内容后,你可以继续深入学习如下方向:

✅ 进阶知识

  • 使用注解方式代替 XML(如 @Select)
  • 动态SQL(if、foreach、choose等标签)
  • 多表关联查询与复杂映射
  • 分页插件 PageHelper 的使用
  • 事务管理与批量操作

✅ 推荐练习项目

  • 学生信息管理系统
  • 商品订单管理系统
  • 博客文章管理系统

✅ 学习资源推荐

  • MyBatis官网
  • 《MyBatis从入门到精通》书籍
  • B站上搜索“MyBatis 入门”相关视频教程

通过本教程,你应该已经掌握了 MyBatis 的基础使用方式。记住,实践是最好的老师,多动手、多写代码,你会发现 MyBatis 并不像想象中那么难。希望你能在 Java 持久层的路上越走越远!

评论 0

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