SpringBoot整合MyBatis Plus實(shí)現(xiàn)基本CRUD與高級(jí)功能
1. 引言
Spring Boot是一款用于快速構(gòu)建Spring應(yīng)用程序的框架,而MyBatis Plus是MyBatis的增強(qiáng)工具,提供了許多方便實(shí)用的功能,包括基本CRUD操作、自動(dòng)填充、樂(lè)觀鎖、邏輯刪除等。本文將詳細(xì)介紹如何在Spring Boot項(xiàng)目中整合MyBatis Plus,并展示其基本CRUD功能以及高級(jí)功能的實(shí)現(xiàn)方式。
2. 項(xiàng)目搭建與依賴配置
首先,確保你已經(jīng)搭建好了Spring Boot項(xiàng)目。接下來(lái),我們需要添加MyBatis Plus的依賴。
2.1 添加MyBatis Plus依賴
在pom.xml
文件中添加以下依賴:
<!-- MyBatis Plus --> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.4.3</version> </dependency>
2.2 配置數(shù)據(jù)源與MyBatis Plus
在application.properties
或application.yml
中配置數(shù)據(jù)庫(kù)連接信息和MyBatis Plus的相關(guān)配置:
spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://localhost:3306/testdb?useUnicode=true&characterEncoding=utf-8&serverTimezone=UTC username: your_username password: your_password mybatis-plus: mapper-locations: classpath:mapper/**/*.xml global-config: db-config: id-type: auto configuration: map-underscore-to-camel-case: true
以上配置中,mapper-locations
指定了MyBatis Plus的XML映射文件路徑,map-underscore-to-camel-case
表示數(shù)據(jù)庫(kù)字段采用下劃線命名,而Java實(shí)體類采用駝峰命名。
3. 實(shí)現(xiàn)基本CRUD功能
3.1 創(chuàng)建實(shí)體類
假設(shè)我們有一個(gè)實(shí)體類User
,對(duì)應(yīng)數(shù)據(jù)庫(kù)中的user
表:
import com.baomidou.mybatisplus.annotation.*; import lombok.Data; import java.util.Date; @Data @TableName("user") public class User { @TableId(type = IdType.AUTO) private Long id; private String username; private String password; private Integer age; @TableField(fill = FieldFill.INSERT) private Date createTime; @TableField(fill = FieldFill.INSERT_UPDATE) private Date updateTime; @TableLogic private Integer deleted; }
在上述實(shí)體類中,使用了@TableName
注解指定了對(duì)應(yīng)的數(shù)據(jù)庫(kù)表名,@TableId
表示主鍵,@TableField
用于自動(dòng)填充,@TableLogic
表示邏輯刪除字段。
3.2 創(chuàng)建Mapper接口
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Mapper; @Mapper public interface UserMapper extends BaseMapper<User> { }
MyBatis Plus提供了BaseMapper
接口,通過(guò)繼承該接口,即可獲得常見(jiàn)的CRUD功能,無(wú)需手動(dòng)編寫(xiě)SQL。
3.3 實(shí)現(xiàn)Service層
import com.baomidou.mybatisplus.extension.service.IService; public interface UserService extends IService<User> { }
創(chuàng)建一個(gè)UserService
接口,繼承自IService
,該接口提供了常用的Service層方法。
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.stereotype.Service; @Service public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService { }
創(chuàng)建UserServiceImpl
類,實(shí)現(xiàn)UserService
接口,并繼承自ServiceImpl
,實(shí)現(xiàn)了其中的方法。
3.4 控制器實(shí)現(xiàn)
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import java.util.List; @RestController @RequestMapping("/user") public class UserController { @Autowired private UserService userService; @GetMapping("/{id}") public User getUser(@PathVariable Long id) { return userService.getById(id); } @GetMapping("/list") public List<User> listUsers() { return userService.list(); } @PostMapping public void addUser(@RequestBody User user) { userService.save(user); } @PutMapping public void updateUser(@RequestBody User user) { userService.updateById(user); } @DeleteMapping("/{id}") public void deleteUser(@PathVariable Long id) { userService.removeById(id); } }
以上代碼中,通過(guò)注入UserService
實(shí)現(xiàn)了基本的CRUD操作的接口。
4. 高級(jí)功能實(shí)現(xiàn)
4.1 自動(dòng)填充功能
MyBatis Plus提供了自動(dòng)填充功能,通過(guò)@TableField
注解的fill
屬性來(lái)指定填充的時(shí)機(jī),常用的值有FieldFill.INSERT
和FieldFill.INSERT_UPDATE
。
@TableField(fill = FieldFill.INSERT) private Date createTime; @TableField(fill = FieldFill.INSERT_UPDATE) private Date updateTime;
上述代碼中,createTime
字段在插入時(shí)自動(dòng)填充,updateTime
字段在插入和更新時(shí)自動(dòng)填充。
4.2 樂(lè)觀鎖功能
MyBatis Plus支持樂(lè)觀鎖的實(shí)現(xiàn),通過(guò)@Version
注解在實(shí)體類的版本字段上添加樂(lè)觀鎖。
@Version private Integer version;
在更新時(shí),MyBatis Plus會(huì)自動(dòng)檢測(cè)版本字段,如果版本號(hào)不匹配,則更新失敗。
4.3 邏輯刪除功能
MyBatis Plus提供了邏輯刪除的功能,通過(guò)@TableLogic
注解在實(shí)體類的邏輯刪除字段上添加邏輯刪除標(biāo)記。
@TableLogic private Integer deleted;
在進(jìn)行邏輯刪除操作時(shí),MyBatis Plus會(huì)更新這個(gè)字段的值,而不是物理刪除記錄。
5. 拓展:MyBatis Plus的其他功能
除了上述介紹的功能外,MyBatis Plus還提供了許多其他強(qiáng)大的功能,如條件構(gòu)造器、分頁(yè)查詢、性能分析、多租戶支持等。以下簡(jiǎn)單介紹一些常用的功能:
5.1 條件構(gòu)造器
MyBatis Plus的條件構(gòu)造器可以輕松構(gòu)建復(fù)雜的查詢條件:
LambdaQueryWrapper<User> wrapper = Wrappers.<User>lambdaQuery() .eq(User::getUsername, "admin") .like(User::getPassword, "pass"); List<User> userList = userService.list(wrapper);
5.2 分頁(yè)查詢
MyBatis Plus支持簡(jiǎn)單的分頁(yè)查詢:
IPage<User> page = new Page<>(1, 10); IPage<User> userPage = userService.page(page, null); List<User> userList = userPage.getRecords();
5.3 性能分析
MyBatis Plus提供了性能分析插件,可以方便地查看SQL執(zhí)行情況:
# application.yml mybatis-plus: configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
通過(guò)配置log-impl
屬性,可以將SQL輸出到控制臺(tái),方便調(diào)試與優(yōu)化。
6. 總結(jié)
通過(guò)本文的介紹,我們學(xué)習(xí)了如何在Spring Boot項(xiàng)目中整合MyBatis Plus,并實(shí)現(xiàn)了基本的CRUD功能以及高級(jí)功能如自動(dòng)填充、樂(lè)觀鎖、邏輯刪除等。MyBatis Plus的強(qiáng)大功能極大地簡(jiǎn)化了數(shù)據(jù)庫(kù)操作,提高了開(kāi)發(fā)效率。在實(shí)際項(xiàng)目中,根據(jù)具體需求,我們可以更深入地了解MyBatis Plus提供的各種功能,以更好地應(yīng)對(duì)復(fù)雜的業(yè)務(wù)場(chǎng)景。希望通過(guò)本文的學(xué)習(xí),讀者能夠更加熟練地使用Spring Boot和MyBatis Plus進(jìn)行項(xiàng)目開(kāi)發(fā)。
以上就是SpringBoot整合MyBatis Plus實(shí)現(xiàn)基本CRUD與高級(jí)功能的詳細(xì)內(nèi)容,更多關(guān)于SpringBoot整合MyBatis Plus的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- SpringBoot使用MyBatis實(shí)現(xiàn)數(shù)據(jù)的CRUD
- SpringBoot整合MyBatis實(shí)現(xiàn)CRUD操作項(xiàng)目實(shí)踐
- SpringBoot之整合MyBatis實(shí)現(xiàn)CRUD方式
- SpringBoot整合Mybatis Plus實(shí)現(xiàn)基本CRUD的示例代碼
- springboot+mybatis-plus實(shí)現(xiàn)內(nèi)置的CRUD使用詳解
- SpringBoot+Mybatis+Vue 實(shí)現(xiàn)商品模塊的crud操作
- 詳解springboot+mybatis-plue實(shí)現(xiàn)內(nèi)置的CRUD使用詳情
- SpringBoot整合Mybatis實(shí)現(xiàn)CRUD
- Spring Boot整合MyBatis-Plus實(shí)現(xiàn)CRUD操作的示例代碼
相關(guān)文章
Spring MVC打印@RequestBody、@Response日志的方法
這篇文章主要介紹了Spring MVC打印@RequestBody、@Response日志的方法,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-02-02Java8中Stream?API的peek()方法詳解及需要注意的坑
這篇文章主要給大家介紹了關(guān)于Java8中Stream?API的peek()方法詳解及需要注意的坑,Java 中的 peek 方法是 Java 8 中的 Stream API 中的一個(gè)方法,它屬于中間操作,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-06-06Python機(jī)器學(xué)習(xí)三大件之二pandas
這篇文章主要介紹了Python機(jī)器學(xué)習(xí)三大件之二pandas,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)Python的小伙伴們有很好地幫助,需要的朋友可以參考下2021-05-05mybatis-plus getOne和邏輯刪除問(wèn)題詳解
這篇文章主要介紹了mybatis-plus getOne和邏輯刪除,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-08-08Java實(shí)現(xiàn)Consul/Nacos根據(jù)GPU型號(hào)、顯存余量執(zhí)行負(fù)載均衡的步驟詳解
這篇文章主要介紹了Java實(shí)現(xiàn)Consul/Nacos根據(jù)GPU型號(hào)、顯存余量執(zhí)行負(fù)載均衡的步驟詳解,本文分步驟結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2025-04-04Java負(fù)載均衡算法實(shí)現(xiàn)之輪詢和加權(quán)輪詢
網(wǎng)上找了不少負(fù)載均衡算法的資源,都不夠全面,后來(lái)自己結(jié)合了網(wǎng)上的一些算法實(shí)現(xiàn),下面這篇文章主要給大家介紹了關(guān)于Java負(fù)載均衡算法實(shí)現(xiàn)之輪詢和加權(quán)輪詢的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-04-04