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

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

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

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

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

什么是邏輯刪除

邏輯刪除是一種常見的刪除策略,它并不真正從數(shù)據(jù)庫(kù)中刪除數(shù)據(jù)記錄,而是通過(guò)修改某個(gè)標(biāo)記字段的值來(lái)表示記錄已經(jīng)被刪除。這種方式的好處在于,數(shù)據(jù)在被標(biāo)記為刪除后依然存在于數(shù)據(jù)庫(kù)中,方便以后恢復(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的依賴。如果還沒(méi)有,可以在pom.xml中添加以下依賴

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

然后,在你的實(shí)體類中使用@TableLogic注解來(lái)標(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表示邏輯刪除的值。不過(guò),通常使用默認(rèn)值即可。

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

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

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

什么是樂(lè)觀鎖

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

@Version注解的作用

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

使用方法

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

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字段為樂(lè)觀鎖字段。在更新數(shù)據(jù)時(shí),MyBatis-Plus會(huì)自動(dòng)檢查這個(gè)字段的值是否發(fā)生變化。

配置

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

  • 步驟一:創(chuàng)建自定義攔截器
    首先,創(chuàng)建一個(gè)類繼承自O(shè)ptimisticLockerInterceptor,并根據(jù)需要重寫相應(yīng)的方法。在這個(gè)例子中,我們將重寫updateById方法來(lái)實(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è)自定義攔截器。可以通過(guò)覆蓋MybatisPlusConfig類的getPlugins()方法來(lái)添加自定義的樂(lè)觀鎖攔截器。

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();
        // 添加自定義樂(lè)觀鎖攔截器
        interceptor.addInnerInterceptor(new CustomOptimisticLockerInterceptor());
        return interceptor;
    }
}

通過(guò)上述步驟,我們成功地創(chuàng)建了一個(gè)自定義的樂(lè)觀鎖攔截器,并將其整合到了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)單有效的樂(lè)觀鎖定機(jī)制,保證了數(shù)據(jù)的一致性和完整性。

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

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

2024-12-20 16:49:15

MyBatis開發(fā)代碼

2023-06-07 08:08:37

MybatisSpringBoot

2025-02-27 09:45:47

2025-05-26 03:20:00

SpringMyBatis數(shù)據(jù)權(quán)限

2023-06-14 08:34:18

Mybatis死鎖框架

2024-07-31 09:56:20

2023-07-29 22:02:06

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

2023-06-07 08:00:00

MySQL批量插入

2023-10-31 08:01:48

Mybatis參數(shù)jdbcurl?

2017-12-21 14:36:10

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

2024-02-28 09:35:52

2024-11-28 19:03:56

2019-04-19 08:47:00

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

2023-12-13 12:20:36

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

2023-01-17 09:13:08

Mybatis后端框架

2023-01-12 09:13:49

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

2014-11-28 14:41:06

工具

2021-09-27 07:56:41

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

2025-02-06 07:45:44

2024-03-19 00:10:00

aiofilesPython開發(fā)
點(diǎn)贊
收藏

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

主站蜘蛛池模板: 超碰97免费观看 | 91精品国产欧美一区二区 | 成人午夜免费网站 | 99亚洲精品 | 国产一区二区欧美 | 久久综合色综合 | www.日韩欧美 | 91看片在线观看 | 亚洲第一福利视频 | 黄视频在线网站 | 精品成人av | 一区二区三区国产 | 国产精品国产成人国产三级 | 妖精视频一区二区三区 | 日韩一区二区福利视频 | 日韩一级免费大片 | 一区二区三区回区在观看免费视频 | 在线视频成人 | 18性欧美| www成年人视频 | 欧美一区二区三区视频 | 亚洲逼院 | 成人一区av偷拍 | 毛片视频免费观看 | 日韩精品一区二区三区视频播放 | 亚洲一区视频在线 | 国产日韩亚洲欧美 | 国产日韩av一区二区 | 国产乱码精品一区二区三区五月婷 | 亚洲综合大片69999 | 日韩欧美第一页 | 亚洲精品久久久久久久久久吃药 | av永久免费 | 久久999| 91精品久久久久久久久 | 97av在线| 国产日韩精品视频 | 精品一区二区三区av | 国产精品久久久久久久久久妇女 | 成年人黄色免费视频 | 精品福利视频一区二区三区 |