成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

請不要自己寫!Spring Boot 一個注解搞定邏輯刪除,支持JPA/MyBatis

開發 前端
在軟件開發中,邏輯刪除作為一種靈活的數據處理方式,被廣泛應用于各種系統中。特別是在需要保留數據歷史或防止誤刪除的場景下,邏輯刪除顯得尤為重要。

環境:SpringBoot3.4.0

1. 簡介

在軟件開發中,邏輯刪除作為一種靈活的數據處理方式,被廣泛應用于各種系統中。特別是在需要保留數據歷史或防止誤刪除的場景下,邏輯刪除顯得尤為重要。

通常邏輯刪除之所以被采用,主要有以下幾個原因:

  • 數據恢復方便,只需更新數據狀態即可
  • 保護數據完整性,避免因物理刪除而破壞數據關聯
  • 滿足審計和合規性要求,保留記錄的存在
  • 降低誤操作風險,為開發者提供安全網

然而,邏輯刪除也可能導致數據膨脹和查詢復雜性增加等問題,因此在使用時需要權衡利弊。

本篇文章將要介紹如何使用JPA和MyBatis來實現邏輯刪除的功能。

2. 實戰案例

2.1 JPA邏輯刪除

基于JPA的邏輯刪除,這里介紹2中實現方案。

使用@SQLDelete注解

在實體類上通過該注解定義執行的SQL語句,如下示例:

@Entity
@Table(name = "t_person")
@SQLDelete(sql = "update t_person p set p.deleted = 1 where p.id = ?")
public class Person {
  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  private Long id ;
  private String name ;
  private Integer age ;
  /**0:正常,1:刪除*/
  @Column(columnDefinition = "int default 0")
  private Integer deleted = 0;
  // getters, setters
}

Repository接口定義

public interface PersonRepository extends JpaRepository<Person, Long> {
}

單元測試

@Test
public void testDelete() {
  this.personRepository.deleteById(2L) ;
}

最終執行SQL

圖片

最終執行了通過@SQLDelete配置的update語句。

使用@SoftDelete注解

@SoftDelete(
  strategy = SoftDeleteType.DELETED, 
  columnName = "deleted", 
  converter = DeletedAttributeConverter.class
)
public class Person {
  // 這里不需要定義deleted字段
}

默認情況下,@SoftDelete注解使用true和false表示刪除與未刪除。通過converter進行數據類型的轉換,這里我們將默認使用的boolean類型改為0,1表示:

public class DeletedAttributeConverter 
  implements AttributeConverter<Boolean, Integer> {
  @Override
  public Integer convertToDatabaseColumn(Boolean attribute) {
    return attribute == null || !attribute ? 0 : 1;
  }
  @Override
  public Boolean convertToEntityAttribute(Integer dbData) {
    return dbData == null || dbData == 0 ? Boolean.FALSE : Boolean.TRUE ;
  }
}

當執行刪除操作時,輸出如下SQL:

圖片圖片

2.2 MyBatis邏輯刪除

MyBatis的邏輯刪除功能并非由它原生支持,而是由mybatis-plus提供的功能。

首先,引入mybatis-plus依賴:

<dependency>
  <groupId>com.baomidou</groupId>
  <artifactId>mybatis-plus-spring-boot3-starter</artifactId>
  <version>3.5.10.1</version>
</dependency>

注意你當前的環境,不同的Spring Boot版本2/3引入的依賴包不一樣。

接下來,進行如下的配置:

mybatis-plus:
  global-config:
    db-config:
      # 全局邏輯刪除字段名
      logic-delete-field: deleted
      # 邏輯已刪除值
      logic-delete-value: 1
      # 邏輯未刪除值
      logic-not-delete-value: 0

如上定義后,通過MyBatis-Plus的接口進行刪除時,將會與jpa一樣,執行update語句。

實體定義:

@TableName("t_person")
public class Person {
  /**0:正常,1:刪除*/
  private Integer deleted = 0;
}

Mapper接口定義如下:

public interface PersonMapper extends BaseMapper<Person> {
}

注意,你需要繼承MyBatis-Plus的BaseMapper接口。

單元測試

@Test
public void testMyBatisDelete() {
  this.personMapper.deleteById(2L) ;
}

SQL輸出如下:

圖片

執行update語句更新deleted字段值。

指定標記刪除字段

以上刪除更新字段是根據全局配置文件中配置的字段名進行更新, 如果個別表是其它字段名時可以通過如下配置:

public class Person {
  @TableLogic
  private Integer state ;
}

當執行刪除時,則會去更新state字段的值,如下SQL輸出:

圖片圖片


責任編輯:武曉燕 來源: Spring全家桶實戰案例源碼
相關推薦

2022-06-06 08:42:04

spring-boo開發接口防盜刷

2022-05-26 10:42:30

數據權限注解

2022-06-23 08:42:08

配置加密解密

2022-06-14 10:47:27

項目日志PUT

2022-06-27 08:36:27

分布式事務XA規范

2020-06-22 07:55:28

接口爬蟲

2022-09-22 13:28:34

Redis分布式鎖

2022-09-29 08:28:57

SpringRedis分布式

2025-04-27 08:26:44

SpringJPA代碼

2025-04-08 01:00:00

Spring開發系統

2015-01-04 14:18:21

程序員

2017-05-12 15:47:15

Spring BootMybatis Ann Web

2012-07-19 13:49:20

2021-06-26 16:24:21

Linux命令系統

2020-09-15 11:40:37

Spring Boot代碼Java

2024-08-19 08:16:57

@Resource@AutowiredSpring

2022-04-28 08:05:05

數據庫數據庫交互

2011-12-16 20:00:57

黑莓

2015-08-25 09:00:48

創業失敗者創業活動

2020-07-09 07:00:00

Python編程語言
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲精品性视频 | 欧美日韩专区 | 欧美日韩亚洲国产 | 国产精品区一区二区三区 | 女人牲交视频一级毛片 | 久久国产精品一区二区三区 | 欧美午夜视频 | 国产精品视频久久久久久 | 亚洲精品视频三区 | 欧美亚洲视频在线观看 | 日本福利视频 | 欧美一a一片一级一片 | 一区二区伦理电影 | 欧美黄色性生活视频 | 2021天天躁夜夜看 | 91资源在线观看 | 日韩一区三区 | 色欧美片视频在线观看 | 丝袜美腿av | 国产精品99久久久久久久久久久久 | 日韩精品一区二区三区视频播放 | 国产一级片 | 国产精品美女www爽爽爽 | 黄色大片视频 | 国产伦一区二区三区久久 | www亚洲精品| 亚洲欧洲小视频 | www.亚洲一区二区三区 | 国产成人精品久久二区二区91 | 青春草91 | 久久亚洲一区 | 成人免费视频网站在线看 | 国产精品国产三级国产aⅴ中文 | 国产欧美久久精品 | 色综合天天天天做夜夜夜夜做 | 午夜精品一区二区三区在线观看 | 国产黄色小视频 | 六月色婷 | 国产sm主人调教女m视频 | 国产成人精品午夜视频免费 | 亚洲444kkkk在线观看最新 |