当前位置: 首页 > java >正文

Spring Boot中MyBatis的定义与使用

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 {@Autowiredprivate 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)的对比

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

总结

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

http://www.xdnf.cn/news/20456.html

相关文章:

  • IOC为什么交由spring容器管理?
  • 操作系统研发工作心得体会 - 于复杂性中构建秩序
  • 每日一题(2)
  • MySQL学习记录-索引
  • 携程社招前端面经
  • pthread_detach函数
  • 2025最新超详细FreeRTOS入门教程:第二章 FreeRTOS任务创建
  • 设计一个 AB 测试平台
  • 实例和对象的区别
  • 【目录-单选】鸿蒙HarmonyOS开发者基础
  • 自适应滤波器:Ch4 最小均方(LMS)算法
  • [光学原理与应用-433]:晶体光学 - 晶体光学是研究光在单晶体中传播规律及其伴随现象的分支学科,聚焦于各向异性光学媒质的光学特性
  • 上海“我店”模式:消费增值新玩法及其隐忧
  • 论文阅读:VGGT Visual Geometry Grounded Transformer
  • 【C++】引用的本质与高效应用
  • 【高等数学】第十一章 曲线积分与曲面积分——第三节 格林公式及其应用
  • javascript 国际化方法
  • AI 生成式艺术重塑动漫角色创作:从技术逻辑到多元可能性(一)
  • GPT-5发布:统一智能体时代的开启——从“工具”到“协作者”的范式跃迁
  • 详解MySQL环境变量配置及其在备份中的应用
  • 计算机内存的工作原理
  • 打工人日报#20250906
  • 模电仿真软件:MultSim14.3下载与安装
  • 【面板数据】各省制造业出口技术复杂度数据集(2010-2023年)
  • AP1271:高性能低功耗LDO稳压器,为精密电子设备提供稳定动力
  • python graphviz中文测试
  • queue容器的常用函数 和注意事项
  • windows server 2022安装终端
  • 计算机视觉(八):开运算和闭运算
  • C++:深入剖析vector