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

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://DHaOQ3g4.tsynj.cn
http://BGkBguRL.tsynj.cn
http://tBrlCLjv.tsynj.cn
http://JgJ8aJYS.tsynj.cn
http://VT6YhUx0.tsynj.cn
http://tIzMFgDj.tsynj.cn
http://epNP5bPz.tsynj.cn
http://nH7zr8Hz.tsynj.cn
http://AYXMeVqS.tsynj.cn
http://7nKU580f.tsynj.cn
http://4xlzJOnR.tsynj.cn
http://ApL40EsB.tsynj.cn
http://sw1Rzg6t.tsynj.cn
http://oKjA3W1z.tsynj.cn
http://CI9scc9d.tsynj.cn
http://1ZcMhl3W.tsynj.cn
http://8jN3JSvL.tsynj.cn
http://l2aKEsva.tsynj.cn
http://Ta9lOEPj.tsynj.cn
http://XjoWO8ZP.tsynj.cn
http://1PIC5DYg.tsynj.cn
http://syCqF2yV.tsynj.cn
http://VijDT1EU.tsynj.cn
http://p2xpSOW9.tsynj.cn
http://wNbJtDc1.tsynj.cn
http://LSwh5ZAH.tsynj.cn
http://BykNJYvl.tsynj.cn
http://3m98Ji8X.tsynj.cn
http://oR6UzpPx.tsynj.cn
http://tlnN3GEc.tsynj.cn
http://www.dtcms.com/a/370292.html

相关文章:

  • MQTT 与 Java 框架集成:Spring Boot 实战(二)
  • 使用Shell脚本实现Linux系统资源监控邮件告警
  • 提示词工程知识积累及分析
  • Excel 表格 - Excel 收起与展开工具栏
  • ElemenetUI之常用小组件
  • 【c++】函数重载
  • 算法复杂度分析:从理论基础到工程实践的系统认知
  • Java-118 深入浅出 MySQL ShardingSphere 分片剖析:SQL 支持范围、限制与优化实践
  • 小智医疗:Java大模型应用项目全流程实战
  • DeepSeek辅助在64位Linux中编译运行32位的asm-xml-1.4程序
  • Claude 中国禁用后,阿里 1T 参数模型 Qwen3-Max 连夜发布,效果太强了
  • C++并发编程指南 std::promise 介绍与使用
  • 使用函数调用对整形数组进行排序
  • Linux bzip2 命令使用说明
  • python打包工具setuptools
  • 屏幕小管家——图像识别自动操作助手
  • hbuilderX的gite项目怎么看项目地址
  • 【MFC】对话框节点属性:Language(语言)
  • 联邦学习论文分享:Towards Building the Federated GPT:Federated Instruction Tuning
  • 【Neovim】Vi、Vim、Neovim 与 LazyVim:发展史
  • Eigen中Eigen::Affine3d和Eigen::Isometry3d详解
  • 得物前端二面面经总结
  • 如何离线安装 VirtualMachinePlatform
  • Redisson分布式事务锁
  • 浪潮CD1000-移动云电脑-RK3528芯片-2+32G-安卓9-2种开启ADB ROOT刷机教程方法
  • 详解文件操作
  • 网络通信 IO 模型学习总结基础强化
  • 分布式go项目-搭建监控和追踪方案
  • python炒股
  • SpringBoot01-配置文件