SpringBoot使用MyBatis的XML文件进行SQL语句编写

 更新时间:2025年07月15日 09:08:45   作者:超级小忍  
在现代 Java Web 开发中,Spring Boot 和 MyBatis 是两个非常流行的技术框架,本文将详细介绍如何在 Spring Boot 项目中使用 MyBatis 的 XML 文件来编写 SQL 语句,感兴趣的可以了解下

前言

在现代 Java Web 开发中,Spring BootMyBatis 是两个非常流行的技术框架。它们的结合使得数据库操作变得更加简洁和高效。本文将详细介绍如何在 Spring Boot 项目中使用 MyBatis 的 XML 文件来编写 SQL 语句,包括配置、代码结构、SQL 编写技巧以及最佳实践等内容。

一、什么是 MyBatis

MyBatis 是一个基于 Java 的持久层框架,它允许开发者通过 XML 或注解方式编写 SQL,并与 Java 对象进行映射(ORM)。相比 Hibernate 等全自动 ORM 框架,MyBatis 更加灵活,适用于需要对 SQL 进行精细控制的场景。

二、Spring Boot + MyBatis 的基本架构

典型的 Spring Boot + MyBatis 项目结构如下:

src
└── main
    ├── java
    │   └── com.example.demo
    │       ├── DemoApplication.java
    │       ├── controller
    │       ├── service
    │       ├── mapper
    │       └── model
    └── resources
        ├── application.properties
        └── mapper
            └── UserMapper.xml

其中 mapper 包下的接口与 resources/mapper 下的 XML 文件是一一对应的。

三、搭建环境

1. 添加依赖(Maven)

<dependencies>
    <!-- Spring Boot Starter -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>

    <!-- MyBatis Starter -->
    <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
        <version>3.0.3</version>
    </dependency>

    <!-- MySQL 驱动 -->
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>8.0.33</version>
    </dependency>
</dependencies>

2. 配置数据库连接(application.properties)

spring.datasource.url=jdbc:mysql://localhost:3306/demo_db?useSSL=false&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

mybatis.mapper-locations=classpath:mapper/**/*.xml
mybatis.type-aliases-package=com.example.demo.model

四、编写 Mapper 接口和 XML 文件

1. 创建实体类(Model)

package com.example.demo.model;

public class User {
    private Long id;
    private String name;
    private String email;

    // Getter and Setter
}

2. 创建 Mapper 接口

package com.example.demo.mapper;

import com.example.demo.model.User;
import java.util.List;

public interface UserMapper {
    List<User> getAllUsers();
    User getUserById(Long id);
    void insertUser(User user);
    void updateUser(User user);
    void deleteUserById(Long id);
}

3. 创建 XML 映射文件

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="getAllUsers" resultType="User">
        SELECT * FROM users
    </select>

    <!-- 根据ID查询用户 -->
    <select id="getUserById" parameterType="long" resultType="User">
        SELECT * FROM users WHERE id = #{id}
    </select>

    <!-- 插入用户 -->
    <insert id="insertUser">
        INSERT INTO users (name, email)
        VALUES (#{name}, #{email})
    </insert>

    <!-- 更新用户 -->
    <update id="updateUser">
        UPDATE users
        SET name = #{name}, email = #{email}
        WHERE id = #{id}
    </update>

    <!-- 删除用户 -->
    <delete id="deleteUserById">
        DELETE FROM users WHERE id = #{id}
    </delete>

</mapper>

五、动态 SQL 使用详解

MyBatis 提供了强大的动态 SQL 功能,常见标签有 <if><choose><when><set><where><foreach> 等。

示例:根据条件查询用户

Mapper 接口:

List<User> searchUsers(@Param("name") String name, @Param("email") String email);

XML 文件:

<select id="searchUsers" resultType="User">
    SELECT * FROM users
    <where>
        <if test="name != null and name != ''">
            AND name LIKE CONCAT('%', #{name}, '%')
        </if>
        <if test="email != null and email != ''">
            AND email LIKE CONCAT('%', #{email}, '%')
        </if>
    </where>
</select>

示例:批量插入用户

<insert id="batchInsert">
    INSERT INTO users (name, email)
    VALUES
    <foreach collection="list" item="user" separator=",">
        (#{user.name}, #{user.email})
    </foreach>
</insert>

六、测试 MyBatis SQL

可以创建一个简单的 Service 层调用 Mapper 并打印结果。

Service 示例

@Service
public class UserService {

    @Autowired
    private UserMapper userMapper;

    public void printAllUsers() {
        List<User> users = userMapper.getAllUsers();
        users.forEach(System.out::println);
    }
}

Controller 示例

@RestController
@RequestMapping("/users")
public class UserController {

    @Autowired
    private UserService userService;

    @GetMapping
    public void getUsers() {
        userService.printAllUsers();
    }
}

七、MyBatis XML 常见标签总结

标签用途
<select>查询操作
<insert>插入操作
<update>更新操作
<delete>删除操作
<where>自动处理 WHERE 子句,避免多余的 AND/OR
<if>条件判断
<choose>/<when>/<otherwise>多条件选择
<set>自动处理更新字段中的逗号问题
<foreach>循环处理集合数据(如 IN 子句、批量插入)

八、最佳实践建议

1.命名规范统一:XML 文件名与 Mapper 接口名保持一致。

2.SQL 与业务逻辑分离:将 SQL 放在 XML 中,便于维护和审计。

3.使用 <where> 和 <set> 避免语法错误

4.合理使用 <resultMap> 映射复杂对象关系

5.开启 MyBatis 日志输出,方便调试:

logging:
  level:
    com.example.demo.mapper: debug

九、扩展功能推荐

PageHelper 分页插件:轻松实现分页查询。

MyBatis Generator:自动生成 Model、Mapper 和 XML 文件。

MyBatis Plus:增强型 MyBatis 工具包,简化 CRUD 操作。

十、结语

在 Spring Boot 中使用 MyBatis 的 XML 方式编写 SQL,不仅保留了 SQL 的灵活性,还利用了框架提供的强大映射能力。通过本篇博客,你已经掌握了从项目搭建到 SQL 编写的完整流程,以及动态 SQL 的高级用法。

以上就是SpringBoot使用MyBatis的XML文件进行SQL语句编写的详细内容,更多关于SpringBoot MyBatis编写SQL的资料请关注脚本之家其它相关文章!

相关文章

  • MongoDB在Spring Boot中的使用方式举例介绍

    MongoDB在Spring Boot中的使用方式举例介绍

    MongoDB是基于Json数据结构的非关系型数据库,每一个Json文档有一个唯一的主键,下面通过实例代码讲解MongoDB在Spring Boot中的使用方式,感兴趣的朋友一起看看吧
    2025-05-05
  • 详解Java中的reactive stream协议

    详解Java中的reactive stream协议

    Stream大家应该都很熟悉了,java8中为所有的集合类都引入了Stream的概念。优雅的链式操作,流式处理逻辑,相信用过的人都会爱不释手。本文将详细介绍Java中的reactive stream协议。
    2021-06-06
  • 深入分析Java中字符串拼接的三种方式

    深入分析Java中字符串拼接的三种方式

    在Java开发中,字符串拼接是一个非常常见的操作,本文将通过实际的性能测试,深入分析 + 运算符、StringBuilder 和 String.join() 三种字符串拼接方式的性能差异,帮助开发者在不同场景下做出正确的选择
    2026-05-05
  • 在SpringBoot项目中动态切换数据源和数据库的详细步骤

    在SpringBoot项目中动态切换数据源和数据库的详细步骤

    在许多企业级应用中,可能需要根据不同的业务需求来切换不同的数据库,如读写分离、分库分表等场景,Spring Boot 提供了灵活的数据源配置方式,本文将介绍如何在 Spring Boot 项目中实现动态切换数据源和数据库的方案,需要的朋友可以参考下
    2025-08-08
  • java 压缩图片(只缩小体积,不更改图片尺寸)的示例

    java 压缩图片(只缩小体积,不更改图片尺寸)的示例

    这篇文章主要介绍了java 如何压缩图片体积,帮助大家更好的利用Java处理图片,应对特殊情况,感兴趣的朋友可以了解下
    2020-10-10
  • 浅谈Spring Boot中Redis缓存还能这么用

    浅谈Spring Boot中Redis缓存还能这么用

    这篇文章主要介绍了浅谈Spring Boot中Redis缓存还能这么用,这种方式是Spring Cache提供的统一接口,实现既可以是Redis,也可以是Ehcache或者其他支持这种规范的缓存框架,感兴趣的小伙伴们可以参考一下
    2019-06-06
  • Java Mybatis框架Dao层的实现与映射文件以及核心配置文件详解分析

    Java Mybatis框架Dao层的实现与映射文件以及核心配置文件详解分析

    MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO为数据库中的记录
    2021-10-10
  • 剑指Offer之Java算法习题精讲链表专题篇

    剑指Offer之Java算法习题精讲链表专题篇

    跟着思路走,之后从简单题入手,反复去看,做过之后可能会忘记,之后再做一次,记不住就反复做,反复寻求思路和规律,慢慢积累就会发现质的变化
    2022-03-03
  • IDEA启动springboot项目报missing ServletWebServerFactory错误的解决方案

    IDEA启动springboot项目报missing ServletWebServerFactory错误的解决

    Spring Boot项目在IDEA中启动时报错,经过排查发现是由于Tomcat依赖的AprLifecycleListener类未被正确加载,通过将Tomcat依赖的scope从provided改为compile,解决了问题
    2025-12-12
  • 在SpringBoot中如何使用HttpClient实现HTTP请求

    在SpringBoot中如何使用HttpClient实现HTTP请求

    本文介绍了如何使用Apache HttpClient来访问HTTP协议的资源,并提供了详细的使用示例,包括GET和POST请求的无参和有参调用
    2025-02-02

最新评论