开发者

Spring Boot 集成 MyBatis 全攻略(最新整理)

开发者 https://www.devze.com 2025-08-19 10:17 出处:网络 作者: 柯南二号
目录Spring Boot 集成 MyBATis 全攻略1. 为什么选择 MyBatis2. 基础环境依赖(pom.XML)3. 配置数据源application.yml4. 定义实体类5. 定义 Mapper 接口6. 使用 XML 配置 SQL(适合复杂 SQL)7. Service + Controlle
目录
  • Spring Boot 集成 MyBATis 全攻略
    • 1. 为什么选择 MyBatis
    • 2. 基础环境
      • 依赖(pom.XML)
    • 3. 配置数据源
      • application.yml
    • 4. 定义实体类
      • 5. 定义 Mapper 接口
        • 6. 使用 XML 配置 SQL(适合复杂 SQL)
          • 7. Service + Controller
            • Service
            • Controller
          • 8. 分页支持
            • 9. 常见优化
              • 10. 总结

              Spring Boot 集成 MyBatis 全攻略

              1. 为什么选择 MyBatis

              • ORM 灵活性:相比 Hibernate,MyBatis 更灵活,SQL 可控,性能优化空间大。
              • 学习曲线低:对于熟悉 SQL 的开发者,上手快。
              • 与 Spring Boot 无缝整合:只需少量配置,即可快速使用。

              2. 基础环境

              依赖(pom.xml)

              <dependencies>
                  <!-- Spring Boot Web -->
                  <dependency>
                      <groupId>org.springframework.boot</groupId>
                      <artifactId>spring-boot-starter-web</artifactId>
                  </dependency>
                  <!-- MyBatis-Spring-Boot-Starter -->
                  <dependency>
                      <groupId>org.mybatis.spring.boot</groupId>
                      <artifactId>mybatis-spring-boot-starter</artifactId>
                      <version>3.0.3</version>
                  </dependency>
                  <!-- 数据库驱动 -->
                  <dependency>
                      <groupId>mysql</groupId>
                      <artifactId>mysql-connector-j</artifactId>
                      <scope>runtime</scope>
                  </dependency>
                  <!-- Lombok(可选) -->
                  <dependency>
                      <groupId>org.projectlombok</groupId>
                      <artifactId>lombok</artifactId>
                      <optional>true</optional>
                  </dependency>
              </dependencies>

              3. 配置数据源

              application.yml

              spring:
                datasource:
                  url: jdbc:mysql://localhost:3306/demo_db?useSSL=false&serverTimezone=Asia/Shanghai
                  username: root
                  password: root123
                  driver-class-name: com.mysql.cj.jdbc.Driver
              mybatis:
                # 指定 Mapper XML 文件位置
                mapper-locations: classpath:mapper/*.xml
                # 指定实体类包,自动映射列名和属性名(开启驼峰命名)
                type-aliases-package: com.example.demo.entity
                configuration:
                  map-underscore-to-camel-case: true

              4. 定义实体类

              package com.example.demo.entity;
              import lombok.Data;
              @Data
              public class User {
                  private Long id;
                  private String username;
                  private String email;
              }

              5. 定义 Mapper 接口

              package com.example.demo.mapper;
              import com.example.demo.entity.User;
              import org.apache.ibatis.annotations.*;
              import Java.util.List;
              @Mapper
              public interface UserMapper {
                  @Select("SELECT * FROM user WHERE id = #{id}")
                  User findById(Long id);
                  @Select("SELECT * FROM user")
                  List<User> findAll();
                  @Insert("INSERT INTO user(username, email) VALUES(#{编程客栈username}, #{email})")
                  @Options(useGeneratedKeys = true, keyProperty = "id")
                  int insert(User user);
                  @Update("UPDATE user SET username=#{username}, email=#{email} WHERE id=#{id}")
                  int update(User user);
                  @Delete("DELETE FROM user WHERE id=#{id}")
                  int delete(Long id);
              }

              ✅ 这里用注解方式,简单清晰;复杂 SQL 可以写到 XML 文件。

              6. 使用 XML 配置 SQL(适合复杂 SQL)

              编程客栈resources/mapper/UserMapper.xml 中:php

              <?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="findAll" resultType="com.example.demo.entity.User">
                      SELECT * FROM user
                  </select>
                  <insert id="insert" parameterType="com.example.demo.entity.User" useGeneratedKeys="true" keyProperty="id">
                      INSERT INTO user(username, email) VALUES(#{username}, #{email})
                  </insert>
              </mapper>

              7. Service + Controller

              Service

              package com.example.demo.service;
              import com.example.demo.entity.Userandroid;
              import com.example.demo.mapper.UserMapper;
              import org.springframework.stereotype.Service;
              import java.util.List;
              @Service
              public class UserService {
                  private final UserMapper userMapper;
                  public UserService(UserMapper userMapper) {
                      this.userMapper = userMapper;
                  }
                  public User getUser(Long id) {
                      return userMapper.findById(id);
                  }
                  public List<User> listUsers() {
                      return userMapper.findAll();
                  }
                  public int addUser(User user) {
                      return userMapper.insert(user);
                  }
              }

              Controller

              package com.example.demo.controller;
              import com.example.demo.entity.User;
              import com.example.demo.service.UserService;
              import org.springframework.web.bind.annotation.*;
              import java.util.List;
              @RestController
              @RequestMapping("/users")
              public class UserControllpythoner {
                  private final UserService userService;
                  public UserController(UserService userService) {
                      this.userService = userService;
                  }
                  @GetMapping("/{id}")
                  public User getUser(@PathVariable Long id) {
                      return userService.getUser(id);
                  }
                  @GetMapping
                  public List<User> listUsers() {
                      return userService.listUsers();
                  }
                  @PostMapping
                  public String addUser(@RequestBody User user) {
                      userService.addUser(user);
                      return "User added successfully!";
                  }
              }

              8. 分页支持

              推荐集成 PageHelper 插件:

              <dependency>
                  <groupId>com.github.pagehelper</groupId>
                  <artifactId>pagehelper-spring-boot-starter</artifactId>
                  <version>1.4.7</version>
              </dependency>

              使用:

              PageHelper.startPage(1, 10);
              List<User> users = userMapper.findAll();
              PageInfo<User> pageInfo = new PageInfo<>(users);

              9. 常见优化

              1. 批量插入:使用 foreach 标签。
              2. 动态 SQL:使用 <if> <choose> 等标签构建灵活查询。
              3. 二级缓存<cache/> 配置 + Redis 集成。
              4. 多数据源:Spring Boot + MyBatis 支持动态数据源切换。
              5. 统一异常处理:结合 @ControllerAdvice 统一返回接口错误信息。

              10. 总结

              Spring Boot + MyBatis 集成流程大致分为:

              1. 加依赖 → 2. 配数据源 → 3. 写实体类 → 4. 写 Mapper(注解/XML) → 5. 写 Service/Controller → 6. 增强功能(分页、缓存、动态 SQL)。

              这样,就能快速搭建一个 基于 Spring Boot + MyBatis 的全栈开发框架

              到此这篇关于Spring Boot 集成 MyBatis 全攻略(最新整理)的文章就介绍到这了,更多相关Spring Boot 集成 MyBatis内容请搜索编程客栈(www.devze.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.devze.com)!

              0

              精彩评论

              暂无评论...
              验证码 换一张
              取 消

              关注公众号