自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

MyBatis-Plus注解雙杰:@TableLogic與@Version,數(shù)據(jù)操作更高效

開發(fā) 前端
我們可以看出MyBatis Plus提供的這兩個(gè)注解極大地簡(jiǎn)化了邏輯刪除和樂觀鎖的實(shí)現(xiàn)過程,使得開發(fā)人員可以更加專注于業(yè)務(wù)邏輯的實(shí)現(xiàn)而不用擔(dān)心底層數(shù)據(jù)操作的復(fù)雜性。

在數(shù)據(jù)持久化框架MyBatis-Plus中,@TableLogic和@Version注解為我們提供了強(qiáng)大的功能,分別用于實(shí)現(xiàn)邏輯刪除和樂觀鎖機(jī)制。

1. @TableLogic注解:邏輯刪除的藝術(shù)

什么是邏輯刪除

邏輯刪除是一種常見的刪除策略,它并不真正從數(shù)據(jù)庫中刪除數(shù)據(jù)記錄,而是通過修改某個(gè)標(biāo)記字段的值來表示記錄已經(jīng)被刪除。這種方式的好處在于,數(shù)據(jù)在被標(biāo)記為刪除后依然存在于數(shù)據(jù)庫中,方便以后恢復(fù)或者審計(jì)。

@TableLogic注解的作用

@TableLogic是MyBatis-Plus提供的一個(gè)注解,用于標(biāo)識(shí)實(shí)體類中的邏輯刪除字段。當(dāng)執(zhí)行刪除操作時(shí),MyBatis-Plus會(huì)自動(dòng)將這個(gè)字段的值設(shè)置為指定的邏輯刪除值(通常是1),而不是真正刪除記錄。

使用方法

首先,確保你的項(xiàng)目中已經(jīng)添加了MyBatis-Plus的依賴。如果還沒有,可以在pom.xml中添加以下依賴

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>最新版本</version>
</dependency>

然后,在你的實(shí)體類中使用@TableLogic注解來標(biāo)記邏輯刪除字段。例如

import com.baomidou.mybatisplus.annotation.TableLogic;
import com.baomidou.mybatisplus.annotation.TableName;
@TableName("user")
public class User {
    private Long id;
    // 邏輯刪除字段
    @TableLogic
    private Integer deleted;
}

配置

@TableLogic注解通常不需要額外配置,它會(huì)自動(dòng)處理邏輯刪除的標(biāo)記。但是,你可以在注解中指定邏輯刪除的值和未刪除的值,例如

@TableLogic(value = "0", delval = "1")

這里的value表示未刪除的值,delval表示邏輯刪除的值。不過,通常使用默認(rèn)值即可。

通過配置文件同樣可以進(jìn)行設(shè)置

mybatis-plus:
  global-config:
    db-config:
      logic-delete-value: 1
      logic-not-delete-value: 0

2.@Version注解:樂觀鎖的實(shí)現(xiàn)

什么是樂觀鎖

樂觀鎖是一種并發(fā)控制機(jī)制,它假設(shè)多用戶并發(fā)訪問時(shí)不會(huì)產(chǎn)生沖突,因此在更新數(shù)據(jù)時(shí)不會(huì)直接鎖定記錄。而是在更新時(shí)檢查記錄是否被其他用戶修改過,如果未被修改,則執(zhí)行更新操作;否則,更新失敗。

@Version注解的作用

@Version注解用于標(biāo)識(shí)實(shí)體類的樂觀鎖字段。在更新數(shù)據(jù)時(shí),MyBatis-Plus會(huì)自動(dòng)檢查這個(gè)字段的值是否發(fā)生變化,如果發(fā)生變化,則更新失??;否則,執(zhí)行更新操作。

使用方法

首先,在你的實(shí)體類中使用@Version注解來標(biāo)記樂觀鎖字段。例如

import com.baomidou.mybatisplus.annotation.Version;
import com.baomidou.mybatisplus.annotation.TableName;
@TableName("user")
public class User {
    private Long id;
    // 版本號(hào)字段
    @Version
    private Integer version;
}

在上述代碼中,@Version注解標(biāo)記了version字段為樂觀鎖字段。在更新數(shù)據(jù)時(shí),MyBatis-Plus會(huì)自動(dòng)檢查這個(gè)字段的值是否發(fā)生變化。

配置

默認(rèn)情況下,MyBatis Plus已經(jīng)為樂觀鎖做好了準(zhǔn)備,無需額外配置即可工作。但如果你需要調(diào)整樂觀鎖失敗時(shí)的行為,可以通過繼承OptimisticLockerInterceptor并重寫相關(guān)方法來自定義行為。

  • 步驟一:創(chuàng)建自定義攔截器
    首先,創(chuàng)建一個(gè)類繼承自O(shè)ptimisticLockerInterceptor,并根據(jù)需要重寫相應(yīng)的方法。在這個(gè)例子中,我們將重寫updateById方法來實(shí)現(xiàn)自定義邏輯。
import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor;
import org.apache.ibatis.executor.Executor;
import org.apache.ibatis.mapping.MappedStatement;
public class CustomOptimisticLockerInterceptor extends OptimisticLockerInnerInterceptor {
    @Override
    public void updateById(Executor executor, MappedStatement ms, Object parameter) {
        try {
            // 調(diào)用父類方法嘗試執(zhí)行更新操作
            super.updateById(executor, ms, parameter);
            System.out.println("Update succeeded.");
        } catch (Exception e) {
            // 自定義處理邏輯,如記錄日志等
            System.err.println("Update failed due to version conflict: " + e.getMessage());
            // 可以選擇在這里添加更多的處理邏輯
        }
    }
}
  • 步驟二:配置插件

然后,在Spring Boot應(yīng)用中配置這個(gè)自定義攔截器??梢酝ㄟ^覆蓋MybatisPlusConfig類的getPlugins()方法來添加自定義的樂觀鎖攔截器。

import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class MybatisPlusConfig {
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        // 添加自定義樂觀鎖攔截器
        interceptor.addInnerInterceptor(new CustomOptimisticLockerInterceptor());
        return interceptor;
    }
}

通過上述步驟,我們成功地創(chuàng)建了一個(gè)自定義的樂觀鎖攔截器,并將其整合到了MyBatis Plus中。這樣,當(dāng)發(fā)生版本沖突時(shí),我們的應(yīng)用程序?qū)凑疹A(yù)設(shè)的方式處理,而非簡(jiǎn)單地拋出異常。

3.小結(jié)

  • @TableLogic使我們能夠輕松實(shí)現(xiàn)邏輯刪除,保護(hù)重要數(shù)據(jù)不被物理刪除。
  • @Version提供了一種簡(jiǎn)單有效的樂觀鎖定機(jī)制,保證了數(shù)據(jù)的一致性和完整性。

通過上述介紹,我們可以看出MyBatis Plus提供的這兩個(gè)注解極大地簡(jiǎn)化了邏輯刪除和樂觀鎖的實(shí)現(xiàn)過程,使得開發(fā)人員可以更加專注于業(yè)務(wù)邏輯的實(shí)現(xiàn)而不用擔(dān)心底層數(shù)據(jù)操作的復(fù)雜性。希望這篇文章能幫助你更好地理解和應(yīng)用MyBatis Plus中的這些強(qiáng)大功能。

責(zé)任編輯:武曉燕 來源: JAVA充電
相關(guān)推薦

2024-12-20 16:49:15

MyBatis開發(fā)代碼

2023-06-07 08:08:37

MybatisSpringBoot

2025-02-27 09:45:47

2023-07-29 22:02:06

MyBatis數(shù)據(jù)庫配置

2023-06-14 08:34:18

Mybatis死鎖框架

2023-06-07 08:00:00

MySQL批量插入

2023-10-31 08:01:48

Mybatis參數(shù)jdbcurl?

2024-07-31 09:56:20

2017-12-21 14:36:10

大數(shù)據(jù)健身智慧

2023-12-13 12:20:36

SpringMySQL數(shù)據(jù)源

2024-02-28 09:35:52

2024-11-28 19:03:56

2023-01-12 09:13:49

Mybatis數(shù)據(jù)庫

2023-01-17 09:13:08

Mybatis后端框架

2019-04-19 08:47:00

前端監(jiān)控數(shù)據(jù)

2025-02-06 07:45:44

2014-11-28 14:41:06

工具

2021-09-27 07:56:41

MyBatis Plu數(shù)據(jù)庫批量插入

2022-05-20 12:24:45

分庫分表Java依賴

2024-09-02 08:12:32

Spring策略MyBatis
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)