SpringBoot使用MyBatis的XML文件進(jìn)行SQL語句編寫
前言
在現(xiàn)代 Java Web 開發(fā)中,Spring Boot 和 MyBatis 是兩個(gè)非常流行的技術(shù)框架。它們的結(jié)合使得數(shù)據(jù)庫操作變得更加簡(jiǎn)潔和高效。本文將詳細(xì)介紹如何在 Spring Boot 項(xiàng)目中使用 MyBatis 的 XML 文件來編寫 SQL 語句,包括配置、代碼結(jié)構(gòu)、SQL 編寫技巧以及最佳實(shí)踐等內(nèi)容。
一、什么是 MyBatis
MyBatis 是一個(gè)基于 Java 的持久層框架,它允許開發(fā)者通過 XML 或注解方式編寫 SQL,并與 Java 對(duì)象進(jìn)行映射(ORM)。相比 Hibernate 等全自動(dòng) ORM 框架,MyBatis 更加靈活,適用于需要對(duì) SQL 進(jìn)行精細(xì)控制的場(chǎng)景。
二、Spring Boot + MyBatis 的基本架構(gòu)
典型的 Spring Boot + MyBatis 項(xiàng)目結(jié)構(gòu)如下:
src
└── main
├── java
│ └── com.example.demo
│ ├── DemoApplication.java
│ ├── controller
│ ├── service
│ ├── mapper
│ └── model
└── resources
├── application.properties
└── mapper
└── UserMapper.xml
其中 mapper 包下的接口與 resources/mapper 下的 XML 文件是一一對(duì)應(yīng)的。
三、搭建環(huán)境
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 驅(qū)動(dòng) -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.33</version>
</dependency>
</dependencies>
2. 配置數(shù)據(jù)庫連接(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. 創(chuàng)建實(shí)體類(Model)
package com.example.demo.model;
public class User {
private Long id;
private String name;
private String email;
// Getter and Setter
}
2. 創(chuàng)建 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. 創(chuàng)建 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>
<!-- 根據(jù)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>
五、動(dòng)態(tài) SQL 使用詳解
MyBatis 提供了強(qiáng)大的動(dòng)態(tài) SQL 功能,常見標(biāo)簽有 <if>、<choose>、<when>、<set>、<where>、<foreach> 等。
示例:根據(jù)條件查詢用戶
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>
六、測(cè)試 MyBatis SQL
可以創(chuàng)建一個(gè)簡(jiǎn)單的 Service 層調(diào)用 Mapper 并打印結(jié)果。
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 常見標(biāo)簽總結(jié)
| 標(biāo)簽 | 用途 |
|---|---|
| <select> | 查詢操作 |
| <insert> | 插入操作 |
| <update> | 更新操作 |
| <delete> | 刪除操作 |
| <where> | 自動(dòng)處理 WHERE 子句,避免多余的 AND/OR |
| <if> | 條件判斷 |
| <choose>/<when>/<otherwise> | 多條件選擇 |
| <set> | 自動(dòng)處理更新字段中的逗號(hào)問題 |
| <foreach> | 循環(huán)處理集合數(shù)據(jù)(如 IN 子句、批量插入) |
八、最佳實(shí)踐建議
1.命名規(guī)范統(tǒng)一:XML 文件名與 Mapper 接口名保持一致。
2.SQL 與業(yè)務(wù)邏輯分離:將 SQL 放在 XML 中,便于維護(hù)和審計(jì)。
3.使用 <where> 和 <set> 避免語法錯(cuò)誤。
4.合理使用 <resultMap> 映射復(fù)雜對(duì)象關(guān)系。
5.開啟 MyBatis 日志輸出,方便調(diào)試:
logging:
level:
com.example.demo.mapper: debug
九、擴(kuò)展功能推薦
PageHelper 分頁插件:輕松實(shí)現(xiàn)分頁查詢。
MyBatis Generator:自動(dòng)生成 Model、Mapper 和 XML 文件。
MyBatis Plus:增強(qiáng)型 MyBatis 工具包,簡(jiǎn)化 CRUD 操作。
十、結(jié)語
在 Spring Boot 中使用 MyBatis 的 XML 方式編寫 SQL,不僅保留了 SQL 的靈活性,還利用了框架提供的強(qiáng)大映射能力。通過本篇博客,你已經(jīng)掌握了從項(xiàng)目搭建到 SQL 編寫的完整流程,以及動(dòng)態(tài) SQL 的高級(jí)用法。
以上就是SpringBoot使用MyBatis的XML文件進(jìn)行SQL語句編寫的詳細(xì)內(nèi)容,更多關(guān)于SpringBoot MyBatis編寫SQL的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- SpringBoot使用MyBatis Generator生成動(dòng)態(tài)SQL的詳細(xì)步驟
- 基于SpringBoot+Mybatis實(shí)現(xiàn)Mysql分表
- Springboot整合Mybatis和SQLite的詳細(xì)過程
- SpringBoot項(xiàng)目整合MybatisPlus并使用SQLite作為數(shù)據(jù)庫的過程
- Springboot應(yīng)用中Mybatis輸出SQL日志的3種方法代碼示例
- SpringBoot如何打印mybatis的執(zhí)行sql問題
- springboot+mybatis-plus 兩種方式打印sql語句的方法
相關(guān)文章
解決springboot項(xiàng)目啟動(dòng)失敗Could not initialize class&
這篇文章主要介紹了解決springboot項(xiàng)目啟動(dòng)失敗Could not initialize class com.fasterxml.jackson.databind.ObjectMapper問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-06-06
Java實(shí)現(xiàn)Word/Pdf/TXT轉(zhuǎn)html的實(shí)例代碼
本文主要介紹了Java實(shí)現(xiàn)Word/Pdf/TXT轉(zhuǎn)html的實(shí)例代碼,代碼簡(jiǎn)單易懂,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-02-02
基于SpringBoot實(shí)現(xiàn)驗(yàn)證碼功能的代碼及思路
SpringBoot技術(shù)是目前市面上從事JavaEE企業(yè)級(jí)開發(fā)過程中使用量最大的技術(shù),下面這篇文章主要給大家介紹了如何基于SpringBoot實(shí)現(xiàn)驗(yàn)證碼功能的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-07-07
如何用注解的方式實(shí)現(xiàn)Mybatis插入數(shù)據(jù)時(shí)返回自增的主鍵Id
這篇文章主要介紹了如何用注解的方式實(shí)現(xiàn)Mybatis插入數(shù)據(jù)時(shí)返回自增的主鍵Id,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-07-07
IDEA2021.2永久激活碼最新超詳細(xì)(激活到2099)
這篇文章主要介紹了IDEA2021.2永久激活碼,是idea2021版最新激活方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-09-09

