亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

MyBatisPlus如何實現自動更新、軟刪除、樂觀鎖操作

發布時間:2021-12-30 09:39:50 來源:億速云 閱讀:381 作者:小新 欄目:大數據

小編給大家分享一下MyBatisPlus如何實現自動更新、軟刪除、樂觀鎖操作,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!

快速入門

步驟

  1. 創建數據庫,數據表

MyBatisPlus如何實現自動更新、軟刪除、樂觀鎖操作

  1. 使用SpringBoot導入maven依賴

          <!-- 數據庫驅動 -->
            <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>8.0.21</version>
            </dependency>
    
            <!-- lombok -->
            <!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>1.18.12</version>
            </dependency>
            <!-- mybatis-plus -->
            <!-- mybatis-plus 是自己開發,并非官方的! -->
            <!-- https://mvnrepository.com/artifact/com.baomidou/mybatis-plus-boot-starter -->
            <dependency>
                <groupId>com.baomidou</groupId>
                <artifactId>mybatis-plus-boot-starter</artifactId>
                <version>3.3.2</version>
            </dependency>


  2. 使用了mybatis-plus 之后(區別于mybatis傳統方式entity-dao(連接mybatis,配置mapper.xml文件)-service-controller)

    • 實體類:

      @Data
      public class User  {
      
          /**
           * 主鍵ID
           */
          @TableId(value = "id", type = IdType.AUTO)
          private Long id;
      
          /**
           * 姓名
           */
          private String name;
      
          /**
           * 年齡
           */
          private Integer age;
      
          /**
           * 郵箱
           */
          private String email;
      
      }


    • mapper接口

      //對應的的Mapper上面繼承基本的類 BaseMapper
      @Repository
      public interface UserMapper extends BaseMapper<User> {
      	//通用CRUD操作父類已經寫好
      }


    • 注意點,我們需要在主啟動類上去掃描我們的mapper包下的所有接口

      @MapperScan("com.mybatis.mybatis_plus.mapper")

    • 測試類中可以測試:

          @Autowired
          private UserMapper userMapper;
          @Test
          void contextLoads() {
      
              List<User> userList = userMapper.selectList(null);
              userList.forEach(System.out::println);
      
          }


自動更新

所有的數據庫表:gmt_create、gmt_modified幾乎所有的表都要配置上!而且需 要自動化!

1、在表中新增字段 gmt_create、gmt_modified,類型datetime

2、把實體類同步,實體類字段屬性上需要增加注解

    @TableField(fill = FieldFill.INSERT)
    private Date gmtCreate;

    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Date gmtModified;

3、編寫handler來處理這個注解!

@Slf4j
@Component // 注意加到ioc容器中
public class MyMetaObjectHandler implements MetaObjectHandler {
        // 插入時的填充策略
        @Override
        public void insertFill(MetaObject metaObject) {
            this.setFieldValByName("gmtCreate",new Date(),metaObject);
            this.setFieldValByName("gmtModified",new Date(),metaObject);
        }
        // 更新時的填充策略
        @Override
        public void updateFill(MetaObject metaObject) {
            this.setFieldValByName("gmtModified",new Date(),metaObject);
        }
}

4、測試插入、測試更新、觀察時間即可。

軟刪除(邏輯刪除)

物理刪除 :從數據庫中直接移除

邏輯刪除 :再數據庫中沒有被移除,而是通過一個變量來讓他失效! deleted = 0 => deleted = 1

1、在數據表中增加一個 deleted 字段

2、實體類中增加屬性

    /**
     * 是否刪除,1已刪除,0未刪除
     */
    @TableLogic
    private Boolean deleted;

3、配置!

# 配置邏輯刪除
mybatis-plus.global-config.db-config.logic-delete-value=1
mybatis-plus.global-config.db-config.logic-not-delete-value=0

新版本Mybatislus無需一下配置了

    @Bean
    public ISqlInjector sqlInjector() {
        return new LogicSqlInjector();
    }

4、測試一下刪除! 記錄依舊在數據庫,但是值確已經變化了,查詢也不會顯示被刪除的數據!

int i = userMapper.deleteById(2L);
System.out.println(i);
List<User> userList = userMapper.selectList(null);
userList.forEach(System.out::println);
樂觀鎖

樂觀鎖 : 故名思意十分樂觀,它總是認為不會出現問題,無論干什么不去上鎖!如果出現了問題, 再次更新值測試

悲觀鎖:故名思意十分悲觀,它總是認為總是出現問題,無論干什么都會上鎖!再去操作!

我們這里主要講解 樂觀鎖機制!

樂觀鎖實現方式:

  • 取出記錄時,獲取當前 version

  • 更新時,帶上這個version

  • 執行更新時, set version = newVersion where version = oldVersion

  • 如果version不對,就更新失敗

    樂觀鎖:1、先查詢,獲得版本號 version = 1
    -- A
    update user set name = "tom", version = version + 1
    where id = 2 and version = 1
    -- B 線程搶先完成,這個時候 version = 2,會導致 A 修改失敗!
    update user set name = "jack", version = version + 1
    where id = 2 and version = 1


在MyBatisPlus里面使用樂觀鎖插件

1、給數據添加version字段,整型默認值為1。

2、實體類添加對應字段

    @Version //樂觀鎖Version注解
    private Integer version;

3、注冊組件

    // 注冊樂觀鎖插件
    @Bean
    public OptimisticLockerInterceptor optimisticLockerInterceptor() {
        return new OptimisticLockerInterceptor();
    }

4、測試

// 測試樂觀鎖成功!
@Test
public void testOptimisticLocker(){
    // 1、查詢用戶信息
    User user = userMapper.selectById(1L);
    // 2、修改用戶信息
    user.setName("Simon");
    // 3、執行更新操作
    userMapper.updateById(user);
}

可以看到更新執行的sql

MyBatisPlus如何實現自動更新、軟刪除、樂觀鎖操作

看完了這篇文章,相信你對“MyBatisPlus如何實現自動更新、軟刪除、樂觀鎖操作”有了一定的了解,如果想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

柳江县| 东宁县| 贵德县| 鸡泽县| 岐山县| 高安市| 红安县| 宁国市| 阿拉善盟| 乌鲁木齐市| 津市市| 韶关市| 勃利县| 安康市| 农安县| 思南县| 合作市| 平阳县| 湘潭县| 三台县| 台中市| 台北市| 城步| 托克托县| 南和县| 正定县| 平山县| 永宁县| 工布江达县| 清水河县| 大关县| 巨野县| 盖州市| 科尔| 甘孜县| 龙口市| 阿尔山市| 渝北区| 曲周县| 新乡县| 镇康县|