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

极客Web
2025-06-25 05:14
阅读 786

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

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

在我们日常开发中,很多应用程序都需要与数据库打交道。比如购物网站需要记录用户的订单、学校系统需要存储学生信息等等。而传统的JDBC代码往往非常繁琐,写起来容易出错,维护也不方便。

MyBatis(发音为“美比特”)是一个轻量级的Java持久层框架,它可以帮助开发者更高效地操作数据库,减少重复代码,提高可读性和开发效率。简单来说:

MyBatis = SQL + Java对象 的桥梁

它不像一些全自动ORM框架那样帮你自动映射,而是给了你更大的灵活性和控制权 —— 你可以写自己的SQL语句,同时还能把结果映射成Java对象。这种平衡使得MyBatis非常流行。


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

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

步骤1:安装Java环境

确保你已经安装了Java(推荐使用JDK8或以上)。可以在终端输入以下命令查看是否安装成功:

java -version
javac -version

如果没有,请前往 Oracle官网 或使用OpenJDK下载安装包。

步骤2:选择一个IDE

推荐使用 IntelliJ IDEA 或 Eclipse。本文以 IntelliJ IDEA 为例,因为它对Maven项目支持很好,适合新手快速上手。

步骤3:创建Maven项目

  1. 打开IDEA → File → New → Project
  2. 选择 Maven → Next
  3. 输入 GroupId(例如 com.example)和 ArtifactId(例如 mybatis-demo
  4. 创建完成后,在项目结构中你会看到一个 pom.xml 文件

步骤4:添加MyBatis依赖

打开 pom.xml,在 <dependencies> 部分添加以下内容:

<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>

保存后,Maven会自动下载所需库文件。

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

我们需要一个简单的MySQL数据库做演示。请先创建测试数据库和用户表:

数据库初始化脚本:

CREATE DATABASE mydemo;

USE mydemo;

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

INSERT INTO users (name, email) VALUES ('张三', 'zhangsan@example.com');

接着在项目根目录下创建一个文件 mybatis-config.xml,用于配置MyBatis的全局设置:

<?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/mydemo?useSSL=false&amp;serverTimezone=UTC"/>
                <property name="username" value="root"/>
                <property name="password" value="your_password"/> <!-- 请替换为你的数据库密码 -->
            </dataSource>
        </environment>
    </environments>
</configuration>

至此,环境搭建完毕!


核心概念讲解:通俗易懂的术语解释

什么是DAO?

DAO 是 Data Access Object(数据访问对象)的缩写。它是负责与数据库交互的对象。在MyBatis中,我们通常通过接口来表示DAO。

什么是Mapper?

Mapper 是 MyBatis 中的核心组件之一,是 DAO 接口的具体实现方式。它将接口方法与 SQL 语句绑定在一起。

什么是XML映射文件?

MyBatis 允许你将 SQL 写在 XML 文件中,并通过 Mapper 接口进行调用。这样可以保持 Java 代码的整洁,便于统一管理和调试。

什么是动态SQL?

MyBatis 支持根据条件拼接 SQL,这就是所谓的“动态 SQL”。比如,我们可以根据用户的输入条件筛选数据,非常灵活。


实战项目:跟着教程一步步完成一个简单项目

我们来做一个简单的项目:查询用户信息并输出到控制台。

第一步:创建User实体类

src/main/java/com/example/model 路径下新建 User.java

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

第二步:创建Mapper接口

src/main/java/com/example/mapper 下创建 UserMapper.java

package com.example.mapper;

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

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

第三步:编写XML映射文件

src/main/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>

第四步:注册Mapper文件

修改之前创建的 mybatis-config.xml,添加Mapper路径:

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

第五步:编写主程序入口

src/main/java/com/example/App.java 中编写:

package com.example;

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.IOException;
import java.io.InputStream;
import java.util.List;

public class App {
    public static void main(String[] args) throws IOException {
        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> users = mapper.getAllUsers();

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

运行程序

点击运行按钮,你会在控制台看到类似如下输出:

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

恭喜你,完成了第一个MyBatis项目的实战!


常见问题解答

问题1:报错提示找不到Mapper?

原因: 可能是Mapper接口没有被正确扫描或XML配置中未注册该Mapper。

解决办法:

  • 检查 mybatis-config.xml 中的 <mappers> 是否包含你编写的XML文件
  • 确保接口名和XML中的 namespace 一致

问题2:SQL执行错误或者数据为空?

可能原因:

  • 数据库连接参数不正确(用户名、密码、URL)
  • 表中无数据或字段名与Java属性名不匹配

建议做法:

  • 使用Navicat或其他工具手动执行一次SQL语句看看是否有结果
  • 检查字段是否使用驼峰命名与数据库字段匹配(如user_name对应userName)

问题3:MyBatis日志不显示?

如果你希望看到MyBatis执行的SQL语句,可以加上日志框架如 log4j 或 slf4j,也可以直接使用MyBatis的内置日志打印。

在MyBatis配置中添加:

<settings>
    <setting name="log4j" value="STDOUT_LOGGING"/>
</settings>

这会把SQL日志打印到控制台。


学习建议:下一步的学习方向

缓存策略对比-1

你现在已掌握MyBatis的基础知识,可以继续深入以下几个方面:

🔍 查询进阶

  • 分页查询(limit + offset)
  • 多表关联查询(join语句 + resultMap)
  • 动态SQL标签:<if><choose><foreach>

📥 插入更新删除操作

  • 编写增删改的SQL语句
  • 使用事务管理(commit / rollback)

🛠️ 工具整合

  • 将MyBatis与Spring集成(MyBatis-Spring)
  • 结合Spring Boot简化配置

🧪 单元测试

  • 使用JUnit编写单元测试验证你的Dao接口

小结:学完你就掌握了什么?

技能点 说明
环境配置 会搭建MyBatis的基本环境
核心理解 明白MyBatis中Mapper、DAO、XML之间的关系
CRUD操作 能写出查询、插入、更新、删除的基本操作
动态SQL 初步了解如何使用动态语句处理不同查询条件
错误排查 能看懂常见异常信息并解决基础问题

从零开始到现在,你已经完成了从理论到实战的第一步!接下来只需要多加练习,就能熟练掌握这个强大而又灵活的数据库访问框架了!


如果你喜欢这篇文章,欢迎点赞、收藏并分享给身边想学MyBatis的小伙伴~

评论 0

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