java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > Spring Boot 集成 MyBatis

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

作者:柯南二号

本文详解SpringBoot集成MyBatis的流程,涵盖依赖配置、数据源设置、实体类与Mapper编写(注解/XML)、Service/Controller开发及分页、缓存、动态SQL等优化,助力建设高效全栈应用,感兴趣的朋友跟随小编一起看看吧

Spring Boot 集成 MyBatis 全攻略

1. 为什么选择 MyBatis

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 中:

<?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.User;
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 UserController {
    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内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文