Bootstrap

MyBatis: 一步步带你入门

什么是 MyBatis?

MyBatis 是一个支持定制 SQL、存储过程以及高级映射的持久层框架。简单来说,它帮助我们更方便地与数据库对话,不用每次都手写复杂的 JDBC 代码。它的主要作用是把 Java 对象和数据库表之间的关系映射起来。

通俗点说,假如你的程序需要从数据库读取用户信息,以前需要写很多代码,但用 MyBatis 之后,工作量可以减少到最小。


为什么选择 MyBatis?

1. 简化数据库操作

传统的 JDBC 编程需要书写大量重复的代码,包括连接数据库、处理结果集等。MyBatis 通过配置和注解大幅度减少了这些冗余代码。

2. 灵活性强

相比其他框架(如 Hibernate),MyBatis 允许开发者直接编写 SQL 语句。这对于需要优化 SQL 性能或者已有复杂 SQL 查询的项目非常重要。

3. 轻量级

MyBatis 的学习曲线较低,配置简单,容易上手。

4. 易于集成

MyBatis 可以方便地和 Spring、Spring Boot 等框架整合,适配性好。


MyBatis 的核心概念

在开始使用 MyBatis 之前,我们需要了解一些基础概念:

1. SQL 映射文件(Mapper 文件)

这是 MyBatis 的核心文件之一,用来定义 SQL 语句以及 Java 对象和数据库表之间的映射关系。通常是一个以 .xml 结尾的文件。

2. SqlSession

这是 MyBatis 的重要接口,用来执行数据库操作。通过它可以发送 SQL 查询、插入、更新和删除命令。

3. Mapper 接口

MyBatis 提供了一种方法,把 Java 接口和 SQL 映射文件绑定起来,直接调用接口方法即可操作数据库。

4. 配置文件

MyBatis 使用一个主配置文件(通常是 mybatis-config.xml),来管理数据源、事务管理等基础配置。


MyBatis 的使用步骤

接下来,我们以一个简单的例子逐步讲解如何使用 MyBatis。

步骤 1:引入依赖

在使用 MyBatis 之前,需要确保项目中包含相关依赖。如果是 Maven 项目,可以在 pom.xml 中添加:

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

如果是 Spring Boot 项目,还可以添加以下依赖:

<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>3.0.2</version>
</dependency>

步骤 2:创建数据库表

假设我们有一个名为 user 的表,结构如下:

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

插入一些测试数据:

INSERT INTO user (name, age) VALUES ('Alice', 25), ('Bob', 30);

步骤 3:配置 MyBatis

配置文件

创建 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/testdb"/>
                <property name="username" value="root"/>
                <property name="password" value="123456"/>
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="mapper/UserMapper.xml"/>
    </mappers>
</configuration>
SQL 映射文件

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

步骤 4:创建实体类和接口

实体类
package com.example.model;

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; }
}
Mapper 接口
package com.example.mapper;

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

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

步骤 5:编写测试代码

使用 MyBatis 提供的 SqlSession 执行查询:

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 MyBatisExample {
    public static void main(String[] args) throws Exception {
        // 加载 MyBatis 配置文件
        InputStream inputStream = Resources.getResourceAsStream("mybatis-config.xml");
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);

        // 获取 SqlSession
        try (SqlSession sqlSession = sqlSessionFactory.openSession()) {
            UserMapper userMapper = sqlSession.getMapper(UserMapper.class);

            // 调用方法查询用户
            List<User> users = userMapper.getAllUsers();
            for (User user : users) {
                System.out.println(user.getName() + " - " + user.getAge());
            }
        }
    }
}

总结

通过本文的介绍,相信你已经掌握了 MyBatis 的基础知识和使用方法。从配置文件到实体类,再到接口和测试,每一步都非常清晰。如果你想更深入地学习,可以尝试整合 Spring Boot,或者研究 MyBatis 的高级功能,比如动态 SQL 和缓存机制。

MyBatis 是一个强大且灵活的工具,适合各种规模的 Java 项目。赶快动手实践吧!

;