Spring Boot + MyBatis Plus 高效開發(fā)實(shí)戰(zhàn)從入門到進(jìn)階優(yōu)化(推薦)
Spring Boot + MyBatis Plus 高效開發(fā)實(shí)戰(zhàn):從入門到進(jìn)階優(yōu)化
在 Java Web 開發(fā)中,Spring Boot 結(jié)合 MyBatis Plus 是高效構(gòu)建 CRUD 業(yè)務(wù)的最佳實(shí)踐之一。相比傳統(tǒng) MyBatis,MyBatis Plus 進(jìn)一步簡化了SQL 語句編寫,減少了重復(fù)代碼,提供了豐富的自動(dòng)封裝功能。
本文將詳細(xì)介紹 Spring Boot + MyBatis Plus 的完整開發(fā)流程,并深入剖析分頁查詢、批量操作、動(dòng)態(tài) SQL、樂觀鎖、代碼優(yōu)化等實(shí)戰(zhàn)技巧,讓你的項(xiàng)目開發(fā)更加高效!??
1. MyBatis Plus 簡介
MyBatis Plus 是 MyBatis 的增強(qiáng)工具,提供了大量開箱即用的功能,如:
? 無需手寫 SQL,封裝了基礎(chǔ) CRUD 方法 (selectById, update, delete
等)。
? Lambda 表達(dá)式查詢,避免 SQL 注入,代碼更加優(yōu)雅。
? 內(nèi)置分頁插件,高效查詢大數(shù)據(jù)集合。
? 邏輯刪除,避免誤刪除數(shù)據(jù)。
? 多租戶模式、樂觀鎖支持,適用于大規(guī)模分布式系統(tǒng)。
2. Spring Boot + MyBatis Plus 快速集成
2.1 引入 Maven 依賴
在 pom.xml
中添加 Spring Boot + MyBatis Plus 依賴:
<dependencies> <!-- Spring Boot Starter --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <!-- MyBatis Plus 依賴 --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.5.3</version> </dependency> <!-- MySQL 驅(qū)動(dòng) --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> <!-- Druid 數(shù)據(jù)源 --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.2.11</version> </dependency> </dependencies>
? 這里使用 Druid 作為數(shù)據(jù)庫連接池,提升性能。
2.2 配置數(shù)據(jù)庫連接
在 application.yml
文件中配置數(shù)據(jù)庫連接:
spring: datasource: url: jdbc:mysql://localhost:3306/demo_db?useSSL=false&serverTimezone=UTC username: root password: root123 driver-class-name: com.mysql.cj.jdbc.Driver mybatis-plus: configuration: map-underscore-to-camel-case: true # 開啟駝峰命名 log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 開啟 SQL 日志
? map-underscore-to-camel-case: true
,自動(dòng)將 user_id
映射為 userId
。
? log-impl: StdOutImpl
,方便查看執(zhí)行的 SQL 語句。
3. 創(chuàng)建 MyBatis Plus 業(yè)務(wù)代碼
3.1 定義數(shù)據(jù)庫表
CREATE TABLE user ( id BIGINT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(50) NOT NULL, age INT NOT NULL, email VARCHAR(100) UNIQUE );
3.2 創(chuàng)建實(shí)體類
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import lombok.Data; @Data @TableName("user") // 指定數(shù)據(jù)庫表名 public class User { @TableId private Long id; // 主鍵 private String name; private Integer age; private String email; }
? @TableName("user")
綁定表名,防止 MyBatis Plus 生成錯(cuò)誤的 SQL。
3.3 創(chuàng)建 DAO 層
MyBatis Plus 提供了 BaseMapper,自動(dòng)封裝 CRUD 方法:
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Mapper; @Mapper public interface UserMapper extends BaseMapper<User> { }
? 無需手寫 SQL,MyBatis Plus 自動(dòng)生成 insert, select, update, delete
方法。
3.4 創(chuàng)建 Service 層
import com.baomidou.mybatisplus.extension.service.IService; public interface UserService extends IService<User> { }
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.stereotype.Service; @Service public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService { }
? IService
+ ServiceImpl
組合,可直接調(diào)用 CRUD 方法。
3.5 創(chuàng)建 Controller
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 public List<User> getAllUsers() { return userService.list(); } // 添加用戶 @PostMapping public boolean addUser(@RequestBody User user) { return userService.save(user); } }
? 直接使用 list()
查詢所有用戶,無需手寫 SQL。
4. 進(jìn)階優(yōu)化:分頁、Lambda 查詢、批量操作
4.1 分頁查詢
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; @GetMapping("/page") public IPage<User> getUserPage(@RequestParam int pageNum, @RequestParam int pageSize) { return userService.page(new Page<>(pageNum, pageSize)); }
? MyBatis Plus 內(nèi)置分頁插件,自動(dòng)優(yōu)化 SQL。
4.2 Lambda 查詢
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; @GetMapping("/search") public List<User> searchUser(@RequestParam String name) { return userService.list(new LambdaQueryWrapper<User>() .like(User::getName, name) // 模糊查詢 .orderByDesc(User::getAge)); // 按年齡倒序 }
? Lambda 表達(dá)式查詢,避免 SQL 注入。
4.3 批量插入
import java.util.Arrays; @PostMapping("/batch") public boolean batchInsert() { List<User> users = Arrays.asList( new User(null, "Alice", 25, "alice@example.com"), new User(null, "Bob", 30, "bob@example.com") ); return userService.saveBatch(users); }
? saveBatch()
支持高效批量插入,減少數(shù)據(jù)庫連接次數(shù)。
5. 總結(jié)
?? MyBatis Plus 提供強(qiáng)大的 CRUD 自動(dòng)封裝,開發(fā)效率大幅提升。
?? 結(jié)合 分頁查詢、Lambda 表達(dá)式、批量操作,代碼更簡潔、更易維護(hù)。
?? 避免 SQL 注入,提升查詢效率,是 Java 開發(fā)者必備的 ORM 工具。
如果你正在開發(fā) Spring Boot 項(xiàng)目,強(qiáng)烈推薦你使用 MyBatis Plus 進(jìn)行高效開發(fā)!?? 快試試看吧! ??
到此這篇關(guān)于Spring Boot + MyBatis Plus 高效開發(fā)實(shí)戰(zhàn)從入門到進(jìn)階優(yōu)化(推薦)的文章就介紹到這了,更多相關(guān)Spring Boot MyBatis Plus開發(fā)實(shí)戰(zhàn)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 如何在springboot中配置和使用mybatis-plus
- SpringBoot整合Mybatis-Plus+Druid實(shí)現(xiàn)多數(shù)據(jù)源配置功能
- springboot下mybatis-plus開啟打印sql日志的配置指南
- SpringBoot使用Mybatis&Mybatis-plus文件映射配置方法
- springboot整合mybatis-plus代碼生成器的配置解析
- Springboot mybatis-plus配置及用法詳解
- SpringBoot整合MyBatisPlus配置動(dòng)態(tài)數(shù)據(jù)源的方法
- 詳解Spring boot上配置與使用mybatis plus
相關(guān)文章
解決@Transaction注解導(dǎo)致動(dòng)態(tài)切換更改數(shù)據(jù)庫失效問題
這篇文章主要介紹了解決@Transaction注解導(dǎo)致動(dòng)態(tài)切換更改數(shù)據(jù)庫失效問題,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-09-09Jdk1.8 HashMap實(shí)現(xiàn)原理詳細(xì)介紹
這篇文章主要介紹了Jdk1.8 HashMap實(shí)現(xiàn)原理詳細(xì)介紹的相關(guān)資料,需要的朋友可以參考下2016-12-12java中BigDecimal的介紹及使用教程BigDecimal格式化及BigDecimal常見問題
BigDecimal是Java在java.math包中提供的線程安全的API類,用來對超過16位有效位的數(shù)進(jìn)行精確的運(yùn)算,這篇文章主要介紹了java中BigDecimal的介紹及使用,BigDecimal格式化,BigDecimal常見問題,需要的朋友可以參考下2023-08-08java關(guān)鍵字abstract(抽象)實(shí)例詳解
在Java中,抽象類是不能實(shí)例化的類,它通常作為其他子類的父類存在,并提供了一種繼承的框架,抽象類中可以包含抽象方法,這些方法沒有具體的實(shí)現(xiàn),必須由子類來提供,本文給大家介紹java關(guān)鍵字abstract(抽象)實(shí)例詳解,感興趣的朋友跟隨小編一起看看吧2024-10-10完美解決gson將Integer默認(rèn)轉(zhuǎn)換成Double的問題
下面小編就為大家?guī)硪黄昝澜鉀Qgson將Integer默認(rèn)轉(zhuǎn)換成Double的問題。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-03-03Java 處理超大數(shù)類型之BigInteger案例詳解
這篇文章主要介紹了Java 處理超大數(shù)類型之BigInteger案例詳解,本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-09-09SpringCloud之Feign代理,聲明式服務(wù)調(diào)用方式
這篇文章主要介紹了SpringCloud之Feign代理,聲明式服務(wù)調(diào)用方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-03-03