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

Python摸鱼师
2025-06-14 14:05
阅读 489

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

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

在开发Java程序时,我们经常会用到数据库来保存和查询数据。例如,用户注册的信息需要存入数据库中,登录的时候又要从数据库中查出来进行验证。

传统的做法是直接使用JDBC(Java Database Connectivity)与数据库交互,但这种方式代码量大、重复性强、维护困难。为了简化这一过程,MyBatis 出现了。

1.1 通俗解释什么是MyBatis

你可以把 MyBatis 想象成一个“中间人”,它的任务就是帮你在 Java 程序和数据库之间传话。你告诉它要执行哪条 SQL 语句,它就把结果返回给你;或者你要插入一条数据,它也能帮你完成。

与Hibernate等“全自动”ORM框架不同的是,MyBatis 是一个半自动化的 ORM 框架

  • ORM = Object Relational Mapping(对象关系映射),意思是可以把数据库的表变成 Java 对象来操作。
  • 半自动化意味着你需要自己写SQL语句,而不是完全由框架自动生成,这样更加灵活可控。

📌 小贴士:初学建议选择 MyBatis,因为它可以让你更清楚理解数据库与Java之间的交互过程。


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

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

在开始编程之前,我们先准备好开发环境。

2.1 所需工具

  • JDK 8+
  • IDE:推荐 IntelliJ IDEA 或 Eclipse
  • Maven(构建项目依赖)
  • MySQL 数据库(也可以用其他数据库如PostgreSQL)
  • 数据库管理工具:如 Navicat 或 DBeaver(非必须)

2.2 创建Maven项目

如果你不太熟悉Maven,也没关系。这里只讲怎么快速添加MyBatis依赖。

打开IDEA创建Maven项目后,在 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>

    <!-- 日志库 -->
    <dependency>
        <groupId>log4j</groupId>
        <artifactId>log4j</artifactId>
        <version>1.2.17</version>
    </dependency>
</dependencies>

2.3 配置数据库连接信息

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

注意修改数据库地址(url)、用户名(username)和密码(password)为你自己的数据库设置。


三、核心概念讲解:这些术语到底是啥?

三、核心概念讲解:这些术语到底是啥?

在学习具体操作前,先了解几个关键概念:

3.1 SqlSessionFactory 和 SqlSession

这两个是 MyBatis 最基本的对象:

  • SqlSessionFactory:它是 MyBatis 工厂类,用来生成 SqlSession。
  • SqlSession:它就相当于数据库的连接会话,通过它可以执行 SQL 语句、提交事务等。

简单记忆:
工厂造会话,会话去干活。

代码示例:

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

3.2 Mapper 映射器

这是 MyBatis 中非常重要的东西。它负责把 Java 接口的方法名和 SQL 语句对应起来。

举个例子:

  • 接口方法:User getUserById(int id)
  • SQL:SELECT * FROM user WHERE id = #{id}

Mapper 可以是一个接口 + XML 文件,也可以是使用注解写的接口。


四、实战项目:用MyBatis做一个小案例

我们现在来动手实现一个简单的功能:根据用户ID查询用户信息。

4.1 步骤一:建一张测试表

先在MySQL中执行如下建表语句:

CREATE DATABASE mydb;

USE mydb;

CREATE TABLE user (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(50),
    age INT
);

INSERT INTO user (name, age) VALUES ('张三', 20), ('李四', 25);

4.2 步骤二:创建对应的Java实体类

新建一个 User.java 类:

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

    // 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 int getAge() { return age; }
    public void setAge(int age) { this.age = age; }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

4.3 步骤三:编写Mapper接口和XML映射文件

创建接口:UserMapper.java

public interface UserMapper {
    User getUserById(int id);
}

创建映射文件: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="UserMapper">
    <select id="getUserById" resultType="User">
        SELECT * FROM user WHERE id = #{id}
    </select>
</mapper>

注意:namespace 要等于接口全名,resultType 是返回值类型。

4.4 步骤四:在主程序中调用

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()) {

            // 获取 Mapper 接口实例
            UserMapper mapper = session.getMapper(UserMapper.class);

            // 查询 ID 为 1 的用户
            User user = mapper.getUserById(1);
            System.out.println(user);
        }
    }
}

运行这个程序,如果一切正常,你应该会看到控制台输出:

User{id=1, name='张三', age=20}

✅ 到此为止,你已经完成了第一个MyBatis的小项目!


五、常见问题解答(FAQ)

刚学的同学常常会有以下疑问:

5.1 Q:报错找不到 Mapper 文件怎么办?

A:检查三点:

  1. mybatis-config.xml 中有没有正确引入 Mapper XML 文件:
    <mappers>
        <mapper resource="mapper/UserMapper.xml"/>
    </mappers>
    
  2. 文件路径是否正确
  3. namespace 是否和接口一致

5.2 Q:为什么不用自己写JDBC连接代码了?

A:因为 MyBatis 内部已经封装好了数据库连接池和JDBC操作,只需要告诉它怎么连数据库即可。

5.3 Q:参数 #{id}${id} 有什么区别?

A:

  • #{id} 是安全的,MyBatis 会自动防止 SQL 注入攻击
  • ${id} 是字符串替换,不安全,容易引发注入漏洞,慎用!

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

恭喜你完成了MyBatis的基础学习!接下来建议你继续学习:

  1. ✅ 增删改操作(Insert / Update / Delete)
  2. ✅ 使用动态SQL(如 <if> <foreach>
  3. ✅ 学习如何使用注解代替XML配置
  4. ✅ 整合Spring Boot使用MyBatis
  5. 📘 阅读官方文档 https://mybatis.org/mybatis-3/zh/index.html

数据流转过程-1


总结

本篇《MyBatis基础教程》面向零基础同学,详细讲解了:

  • MyBatis是什么,能解决什么问题
  • 如何搭建开发环境并连接数据库
  • 核心概念的理解(SqlSession、Mapper)
  • 实战一个小项目:查询用户信息
  • 遇到常见问题怎么办
  • 下一步学习路线建议

只要你多敲代码、勤练习,很快就能熟练掌握MyBatis,并将其应用到实际项目中!

🚀 继续努力,祝你早日成为Java开发高手!

评论 0

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