詳解MybatisPlus中@TableLogic注解的使用
1. 簡單介紹
嗨,大家好,今天給想給大家分享一下關(guān)于Mybatis-plus 的 Service 層的一些方法的使用。今天沒有總結(jié),因?yàn)槎际且恍〢PI沒有什么可以總結(jié)的,直接看著調(diào)用就可以了。
下面我們將介紹 @TableLogic 注解的用法,以及每個(gè)屬性的實(shí)際意義和用法
2. 注解說明
@TableLogic 用于實(shí)現(xiàn)數(shù)據(jù)庫數(shù)據(jù)邏輯刪除
注意,該注解只對自動(dòng)注入的 sql 起效
3. @TableLogic 對于 CIUD 的限制
3.1 插入(insert)
不作限制
3.2 查找(select)
@TableLogic 注解將會(huì)在 select 語句的 where 條件添加條件,過濾掉已刪除數(shù)據(jù)
且使用 wrapper.entity 生成的 where 條件會(huì)忽略該字段
SELECT user_id,name,sex,age,deleted FROM user WHERE user_id=1 AND deleted='0'
3.3 更新(update)
@TableLogic 注解將會(huì)在 update 語句的 where 條件后追加條件,防止更新到已刪除數(shù)據(jù)
且使用 wrapper.entity 生成的 where條件會(huì)忽略該字段
update user set deleted=1 where id = 1 and deleted=0
3.4 刪除(delete)
@TableLogic 注解會(huì)將 delete 語句轉(zhuǎn)變?yōu)?update 語句
update user set deleted=1 where id = 1 and deleted=0
4. @TableLogic 字段類型支持說明:
支持所有數(shù)據(jù)類型(推薦使用 Integer、Boolean、LocalDateTime)
如果數(shù)據(jù)庫字段使用 datetime,邏輯未刪除值和已刪除值支持配置為字符串 null,另一個(gè)值支持配置為函數(shù)來獲取值如now()
附錄:
(1)邏輯刪除是為了方便數(shù)據(jù)恢復(fù)和保護(hù)數(shù)據(jù)本身價(jià)值等等的一種方案,但實(shí)際就是刪除。
(2)如果你需要頻繁查出來看就不應(yīng)使用邏輯刪除,而是以一個(gè)狀態(tài)去表示。
5. 屬性說明
5.1 value
用來指定邏輯未刪除值,默認(rèn)為空字符串
5.2 delval
用來指定邏輯刪除值,默認(rèn)為空字符串。
6. 在配置文件中實(shí)現(xiàn)
當(dāng)然,你也可以不在 @TableLogic 注解中指定 value 和 delval 屬性的值。使用全局邏輯刪除配置信息,配置如下:
# application.yml mybatis-plus: global-config: db-config: # 全局邏輯刪除的實(shí)體字段名 (since 3.3.0, 配置后可以忽略 @TableLogic 中的配置) logic-delete-field: flag # 邏輯已刪除值(默認(rèn)為 1) logic-delete-value: 1 # 邏輯未刪除值(默認(rèn)為 0) logic-not-delete-value: 0
7. 代碼實(shí)踐
7.1 代碼實(shí)踐過程
我們在 user 數(shù)據(jù)表中添加一個(gè) deleted 字段。
如果該字段值為1,表示記錄被刪除。如果該字段值為0,表示記錄未被刪除
1.向 user 數(shù)據(jù)表添加 deleted 字段,sql 如下:
-- 添加一個(gè) deleted 字段,實(shí)現(xiàn)邏輯刪除 ALTER TABLE `user` ADD COLUMN `deleted` varchar(1) NULL DEFAULT 0 COMMENT '是否刪除(1-刪除;0-未刪除)';
2.創(chuàng)建 user 表的實(shí)體類 AnnotationUser7Bean
使用 @TableLogic 注解將 deleted 成員變量指定為邏輯刪除字段
import com.baomidou.mybatisplus.annotation.*; @TableName(value = "user") public class AnnotationUser7Bean { @TableId(value = "user_id", type = IdType.AUTO) private int userId; @TableField("name") private String name; @TableField("sex") private String sex; @TableField("age") private Integer age; @TableLogic(value = "0", delval = "1") private String deleted; // 忽略 getter 和 setter 方法 @Override public String toString() { return "UserBean{" + "userId=" + userId + ", name='" + name + '\'' + ", sex='" + sex + '\'' + ", age=" + age + ", deleted=" + deleted + '}'; } }
上面代碼中,使用 @TableLogic 注解將 deleted 成員變量指定為邏輯刪除字段
@TableLogic(value = "0", delval = "1") private String deleted;
3.客戶端代碼,先查詢用戶ID為1的用戶是否存在
如果存在,則刪除該用戶信息
然后,查詢用戶ID小于10的用戶信息
package com.hxstrive.mybatis_plus.simple_mapper.annotation; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.hxstrive.mybatis_plus.mapper.AnnotationUser7Mapper; import com.hxstrive.mybatis_plus.model.AnnotationUser7Bean; import org.junit.jupiter.api.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; @RunWith(SpringRunner.class) @SpringBootTest class AnnotationDemo7 { @Autowired private AnnotationUser7Mapper userMapper; @Test void contextLoads() throws Exception { // 刪除用戶ID為1的用戶信息 AnnotationUser7Bean oldUserBean = userMapper.selectById(1); if(null != oldUserBean) { userMapper.deleteById(oldUserBean.getUserId()); } // 查詢用戶信息 QueryWrapper<AnnotationUser7Bean> wrapper = new QueryWrapper<>(); wrapper.lt("user_id", 10); for(AnnotationUser7Bean item : userMapper.selectList(wrapper)) { System.out.println(item); } } }
7.2 數(shù)據(jù)庫代碼執(zhí)行說明
根據(jù)用戶ID查詢用戶信息
Preparing: SELECT user_id,name,sex,age,deleted FROM user WHERE user_id=? AND deleted='0' Parameters: 1(Integer)
根據(jù)用戶ID刪除用戶信息
sql 是一個(gè)更新語句,這是因?yàn)槲覀兪褂昧诉壿媱h除,而不是物理刪除
Preparing: UPDATE user SET deleted='1' WHERE user_id=? AND deleted='0' Parameters: 1(Integer)
查詢用戶ID小于10的用戶信息
Preparing: SELECT user_id,name,sex,age,deleted FROM user WHERE deleted='0' AND (user_id < ?) Parameters: 10(Integer)
以上就是詳解MybatisPlus中@TableLogic注解的使用的詳細(xì)內(nèi)容,更多關(guān)于MybatisPlus @TableLogic注解的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
如何利用Java使用AOP實(shí)現(xiàn)數(shù)據(jù)字典轉(zhuǎn)換
這篇文章主要介紹了如何利用Java使用AOP實(shí)現(xiàn)數(shù)據(jù)字典轉(zhuǎn)換,AOP也是我們常說的面向切面編程,AOP在我們開發(fā)過程中應(yīng)用也比較多,在這里我們就基于AOP來實(shí)現(xiàn)一個(gè)數(shù)據(jù)字典轉(zhuǎn)換的案例2022-06-06Spring使用AspectJ注解和XML配置實(shí)現(xiàn)AOP
這篇文章主要介紹了Spring使用AspectJ注解和XML配置實(shí)現(xiàn)AOP的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-10-10java實(shí)現(xiàn)24點(diǎn)紙牌游戲
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)24點(diǎn)紙牌游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-03-03Java 類型相互轉(zhuǎn)換byte[]類型,Blob類型詳細(xì)介紹
這篇文章主要介紹了Java 類型相互轉(zhuǎn)換byte[]類型,Blob類型的相關(guān)資料,需要的朋友可以參考下2016-10-10解決@Autowired注入空指針問題(利用Bean的生命周期)
這篇文章主要介紹了解決@Autowired注入空指針問題(利用Bean的生命周期),具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-02-02詳解IDEA用maven創(chuàng)建springMVC項(xiàng)目和配置
本篇文章主要介紹了詳解IDEA用maven創(chuàng)建springMVC項(xiàng)目和配置 ,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-09-09java8 stream 如何打印數(shù)據(jù)元素
這篇文章主要介紹了java8 stream 如何打印數(shù)據(jù)元素,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-11-11SpringBoot詳解如何實(shí)現(xiàn)讀寫分離
當(dāng)響應(yīng)的瓶頸在數(shù)據(jù)庫的時(shí)候,就要考慮數(shù)據(jù)庫的讀寫分離,當(dāng)然還可以分庫分表,那是單表數(shù)據(jù)量特別大,當(dāng)單表數(shù)據(jù)量不是特別大,但是請求量比較大的時(shí)候,就要考慮讀寫分離了.具體的話,還是要看自己的業(yè)務(wù)...如果還是很慢,那就要分庫分表了...我們這篇就簡單講一下讀寫分離2022-05-05Java Mail郵件發(fā)送如何實(shí)現(xiàn)簡單封裝
這篇文章主要介紹了Java Mail郵件發(fā)送如何實(shí)現(xiàn)簡單封裝,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-11-11