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

502守望者
2025-06-25 08:54
阅读 235

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

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

你是不是也经常听到“数据库操作”、“DAO层”这样的术语?Java开发中,我们常常需要和数据库打交道。比如用户注册信息要保存到数据库,查询商品库存也需要从数据库取数据。
传统的做法是直接写JDBC代码来连接数据库并执行SQL语句,但这种方式代码冗余、维护困难。

这时候,MyBatis就派上用场了。

MyBatis是一个 轻量级的Java持久层框架(也就是用于简化Java程序与数据库交互的工具)。它的核心思想是:

让开发者专注于SQL本身,而不是繁杂的底层数据库连接管理。

换句话说:你可以把MyBatis理解为一个数据库操作助手,它帮你处理连接、事务等繁琐的工作,你只需要专注地写SQL,并把结果映射成Java对象就可以了。

🎯 一句话总结
MyBatis = 简化数据库操作 + 更灵活地控制SQL语句


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

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

学习MyBatis之前,我们需要准备好以下环境。

1. 安装JDK

确保你的电脑上安装了 JDK 1.8 或更高版本。在命令行输入下面的命令查看当前安装的版本:

java -version

如果没有安装,请前往官网下载安装:https://www.oracle.com/java/technologies/javase-downloads.html


2. 安装IDE(推荐IntelliJ IDEA)

IntelliJ IDEA是一款非常强大的Java开发工具。对于初学者来说,社区版完全够用。

🔗 下载地址:https://www.jetbrains.com/idea/download/


3. 安装MySQL数据库(本地或远程都可)

MyBatis可以支持多种数据库,我们以最常见的 MySQL 为例。

✅ 推荐安装版本:MySQL 5.7+ 或 MySQL 8.0+

你可以使用 XAMPP 或者单独安装MySQL服务。

登录测试一下是否安装成功:

mysql -u root -p

4. 创建Maven项目(通过IDEA)

Maven是用来管理项目依赖的工具,我们可以很方便地导入MyBatis库和其他依赖。

步骤如下:

  1. 打开IntelliJ IDEA
  2. 选择 Create New Project
  3. 选择 Maven > Next
  4. 输入 GroupId(如 com.example)和 ArtifactId(如 mybatis-demo
  5. Finish

5. 在pom.xml中添加MyBatis和MySQL驱动依赖

打开项目的 pom.xml 文件,在 <dependencies> 中添加以下内容:

<dependency>
    <groupId>org.mybatis</groupId>
    <artifactId>mybatis</artifactId>
    <version>3.5.9</version>
</dependency>

<!-- MySQL JDBC 驱动 -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.26</version>
</dependency>

📌 注意:请根据你使用的MySQL版本选择对应的Connector版本。


✅ 到此为止,我们的开发环境已经搭建完成!


核心概念:什么是Mapper、SqlSession、配置文件?

核心概念:什么是Mapper、SqlSession、配置文件?

我们先了解几个MyBatis中的关键角色:

名称 角色说明
SqlSessionFactory 工厂类,用来创建SqlSession,整个应用中通常只创建一次
SqlSession 数据库会话,执行SQL语句、获取Mapper对象
Mapper接口 自定义接口,声明对数据库操作的方法
XML映射文件 把接口方法绑定具体的SQL语句

通俗一点解释就是:

就像餐厅点菜一样,你作为顾客(程序员),只需要告诉服务员(MyBatis)你想吃什么菜(SQL语句),不需要自己去厨房做菜(手动JDBC操作)。


实战项目:做一个简单的学生管理系统

实战项目:做一个简单的学生管理系统

让我们动手做一个小项目练练手吧!这个项目的目标是实现对学生表的增删查改功能。


第一步:创建数据库和学生表

在MySQL里执行以下SQL语句:

CREATE DATABASE mybatis_db;

USE mybatis_db;

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

第二步:创建学生类 Student.java

新建包 com.example.model,在里面创建 Student.java

package com.example.model;

public class Student {
    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 "Student{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

第三步:配置MyBatis配置文件 config.xml

resources 目录下新建 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/mybatis_db?useSSL=false&amp;serverTimezone=UTC"/>
                <property name="username" value="root"/>
                <property name="password" value="your_password"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="mapper/StudentMapper.xml"/>
    </mappers>
</configuration>

第四步:编写Mapper接口 StudentMapper.java

新建包 com.example.mapper.StudentMapper

package com.example.mapper;

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

public interface StudentMapper {
    List<Student> getAllStudents();
    Student getStudentById(int id);
    void insertStudent(Student student);
    void updateStudent(Student student);
    void deleteStudent(int id);
}

第五步:编写Mapper XML文件 StudentMapper.xml

resources/mapper/ 下新建 StudentMapper.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.StudentMapper">

    <!-- 查询所有学生 -->
    <select id="getAllStudents" resultType="com.example.model.Student">
        SELECT * FROM student
    </select>

    <!-- 根据ID查询学生 -->
    <select id="getStudentById" parameterType="int" resultType="com.example.model.Student">
        SELECT * FROM student WHERE id = #{id}
    </select>

    <!-- 插入学生 -->
    <insert id="insertStudent" parameterType="com.example.model.Student">
        INSERT INTO student (name, age)
        VALUES (#{name}, #{age})
    </insert>

    <!-- 更新学生 -->
    <update id="updateStudent" parameterType="com.example.model.Student">
        UPDATE student
        SET name = #{name}, age = #{age}
        WHERE id = #{id}
    </update>

    <!-- 删除学生 -->
    <delete id="deleteStudent" parameterType="int">
        DELETE FROM student WHERE id = #{id}
    </delete>

</mapper>

第六步:主程序测试 CRUD 功能

新建类 TestMyBatis.java,放在任意位置即可:

package com.example.test;

import com.example.mapper.StudentMapper;
import com.example.model.Student;
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 TestMyBatis {

    public static void main(String[] args) throws Exception {
        String resource = "config.xml";
        InputStream inputStream = Resources.getResourceAsStream(resource);
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

        try (SqlSession session = sqlSessionFactory.openSession()) {
            StudentMapper mapper = session.getMapper(StudentMapper.class);

            // 查询所有学生
            List<Student> students = mapper.getAllStudents();
            System.out.println("所有学生:" + students);

            // 插入学生
            Student s = new Student();
            s.setName("Tom");
            s.setAge(20);
            mapper.insertStudent(s);
            session.commit(); // 提交事务
            System.out.println("插入成功");

            // 再次查询验证
            students = mapper.getAllStudents();
            System.out.println("新增后:" + students);
        }
    }
}

运行这个程序,你应该能看到输出的信息。


常见问题:新手最常遇到的几个坑及解决办法

下面是一些新手容易踩的坑以及应对方案:

❓1. 为什么找不到Mapper接口?

✅ 检查以下几个方面:

  • Mapper接口是否正确地放到包目录下
  • config.xml<mappers> 是否包含了这个Mapper文件路径
  • 项目构建时是否包含了这些资源文件(检查Build配置)

❓2. SQL语句报错或参数未传入?

✅ 可能的问题:

  • #{xxx} 中的变量名拼写错误
  • 没有调用 session.commit() 导致事务未提交
  • 参数类型不一致(比如期望int,实际传了String)

💡 小技巧:可以在MyBatis日志中打印SQL语句,帮助排查问题。


❓3. 连接不上数据库怎么办?

✅ 检查:

  • 数据库是否正在运行?
  • url、用户名、密码是否正确?
  • 是否导入了正确的MySQL驱动?

❓4. 启动时报错 “No MyBatis mapper was found in”

✅ 解决办法: 这通常是因为MyBatis找不到你的Mapper文件,检查:

  • mapper.xml 是否放置在 src/main/resources
  • namespace 是否与Mapper接口的全限定类名一致

学习建议:学完基础后下一步怎么走?

恭喜你完成了第一个MyBatis项目!现在你已经掌握了MyBatis的基本用法。接下来可以继续深入学习以下方向:

🧩 一、进阶知识点

  • MyBatis动态SQL(如 <if><foreach>
  • 结果映射(ResultMap)
  • 注解方式代替XML(@Select、@Insert 等)
  • 缓存机制(一级缓存、二级缓存)

💾 二、整合Spring Boot使用MyBatis

大多数实际项目都会结合Spring Boot使用MyBatis。你可以进一步学习:

  • Spring Boot + MyBatis 整合
  • 使用 MyBatis-Plus 快速开发CRUD
  • 分页插件 PageHelper 使用

🛠️ 三、提升工程能力

  • 单元测试
  • 日志集成(如Log4j、SLF4J)
  • 事务控制
  • 异常处理

总结

本文从零开始介绍了MyBatis的基础使用方法,包括开发环境搭建、核心概念解析、实战项目演练和常见问题解答。只要你按照步骤一步步练习,很快就能掌握这项实用技能。

记住一句话:

“纸上得来终觉浅,绝知此事要躬行。”

希望你在编程路上越走越远,加油💪!

如果你喜欢这种风格的教程,欢迎继续关注更多Java相关的内容!

评论 0

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