Spring Boot中MyBatis的定义与使用

发布于:2025-09-07 ⋅ 阅读:(20) ⋅ 点赞:(0)

MyBatis 是一款优秀的持久层框架(ORM 框架),它支持自定义 SQL、存储过程以及高级映射。 在 Spring Boot 项目中,它的主要作用是简化数据库操作,充当应用程序和数据库之间的桥梁,让你能够以更面向对象的方式与数据库交互,而无需处理繁琐的 JDBC 代码。


核心功能与特点(它做了什么?)

  1. 解耦 SQL 与代码

    • 传统的 JDBC 需要将 SQL 语句硬编码在 Java 代码中,难以维护。

    • MyBatis 将 SQL 语句剥离出来,集中配置在 XML 文件或使用注解写在 Mapper 接口上,实现了数据操作逻辑与业务逻辑的分离。

  2. ORM(对象关系映射)

    • 自动将数据库表中的记录映射成 Java 对象(POJO),以及将 Java 对象的变化持久化到数据库表中。

    • 你操作的是 User 这样的对象,而 MyBatis 在背后帮你生成 INSERT INTO user ... 这样的 SQL 并执行。

  3. 动态 SQL

    • 提供了强大的动态 SQL 功能,可以根据不同的条件智能地拼接 SQL 语句,避免编写大量重复和复杂的条件判断代码。例如 <if><choose><foreach> 等标签。

  4. 简化开发

    • 通过与 Spring Boot 集成,大部分配置都可以自动完成。你只需要定义好数据模型(Entity)、Mapper 接口和 SQL 映射,就可以直接注入 Mapper 接口使用,极大地提高了开发效率。


在 Spring Boot 中的工作流程

  1. 定义数据实体(Entity):一个普通的 Java 类,其属性对应数据库表中的字段。

    java

    // User.java
    @Data // Lombok 注解,自动生成getter/setter等方法
    public class User {
        private Long id;
        private String name;
        private String email;
    }
  2. 创建 Mapper 接口:定义一个 Java 接口,里面声明需要对数据库进行的操作方法。

    java

    // UserMapper.java
    @Mapper // 关键注解:Spring Boot 会为此接口自动生成实现类
    public interface UserMapper {
        User findById(Long id);
        void insert(User user);
        void update(User user);
        void deleteById(Long id);
    }
  3. 提供 SQL 映射:告诉 MyBatis 接口中的方法具体要执行什么 SQL。有两种主要方式:

    • XML 方式(推荐用于复杂 SQL):在 resources/ 目录下创建对应的 XML 文件(如 UserMapper.xml)。

      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.demo.mapper.UserMapper">
          <select id="findById" resultType="com.example.demo.entity.User">
              SELECT * FROM user WHERE id = #{id}
          </select>
          <insert id="insert" parameterType="com.example.demo.entity.User" useGeneratedKeys="true" keyProperty="id">
              INSERT INTO user (name, email) VALUES (#{name}, #{email})
          </insert>
      </mapper>
    • 注解方式(简单 SQL):直接在接口方法上使用 @Select@Insert@Update@Delete 等注解。

      java

      @Mapper
      public interface UserMapper {
          @Select("SELECT * FROM user WHERE id = #{id}")
          User findById(Long id);
          
          @Insert("INSERT INTO user(name, email) VALUES(#{name}, #{email})")
          void insert(User user);
      }
  4. 在 Service 中注入并使用:由于 MyBatis-Spring-Boot-Starter 的自动配置,Spring 会自动为 @Mapper 标记的接口生成代理实现类。你可以直接通过 @Autowired 注入它并使用。

    java

    @Service
    public class UserService {
        @Autowired
        private UserMapper userMapper; // 直接注入接口,无需自己实现
    
        public User getUserById(Long id) {
            return userMapper.findById(id);
        }
    
        public void createUser(User user) {
            userMapper.insert(user);
        }
    }

如何在 Spring Boot 项目中集成

非常简单,通常只需两步:

  1. 添加依赖:在 pom.xml 中加入 MyBatis 的 Spring Boot Starter 依赖。

    xml

    <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
        <version>3.0.3</version> <!-- 请使用最新版本 -->
    </dependency>

    同时还需要加入数据库驱动依赖,例如 MySQL:

    xml

    <dependency>
        <groupId>com.mysql</groupId>
        <artifactId>mysql-connector-j</artifactId>
        <scope>runtime</scope>
    </dependency>
  2. 配置数据源:在 application.properties 或 application.yml 中配置数据库连接信息。

    properties

    # application.properties
    spring.datasource.url=jdbc:mysql://localhost:3306/your_database
    spring.datasource.username=your_username
    spring.datasource.password=your_password
    spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
    
    # 可选:指定 MyBatis Mapper XML 文件的位置
    mybatis.mapper-locations=classpath:mapper/*.xml
    # 可选:配置实体类的包别名
    mybatis.type-aliases-package=com.example.demo.entity

与 JPA(如 Hibernate)的对比

特性 MyBatis JPA (Hibernate)
控制力 。开发者需要编写和优化所有 SQL,对 SQL 有完全的控制权。 。框架自动生成 SQL,开发者控制力较弱,有时生成的 SQL 不够优化。
开发效率 对于简单 CRUD 较慢,对于复杂查询和定制化操作更快。 。简单的 CRUD 操作非常快,无需写 SQL。
学习曲线 简单,主要需要学习 SQL 和 MyBatis 的标签。 较陡峭,需要学习 JPQL 和框架的复杂概念(如缓存、延迟加载)。
适用场景 需要高度优化 SQL、处理复杂查询、使用存储过程或与现有复杂数据库 schema 打交道的项目。 适合模型驱动开发、快速原型构建、数据库 schema 由应用控制的项目。

总结

在 Spring Boot 中,MyBatis 是一个通过少量配置就能集成的高效、灵活、SQL-centric 的持久层框架。它完美地结合了 Spring Boot 的自动配置优势和开发者对 SQL 的完全控制能力,是许多需要精细操作数据库和进行 SQL 优化的项目的首选。


网站公告

今日签到

点亮在社区的每一天
去签到