美文网首页
Mybatis-Plus乐观锁应用以及乐观锁讲解

Mybatis-Plus乐观锁应用以及乐观锁讲解

作者: c_gentle | 来源:发表于2020-09-05 09:36 被阅读0次
    乐观锁.png
    乐观锁.png

    1.乐观锁

    主要适用场景:当要更新一条记录的时候,希望这条记录没有被别人更新,也就是说实现线程安全的数据更新
    乐观锁实现方式:

    取出记录时,获取当前version
    更新时,带上这个version
    执行更新时, set version = newVersion where version = oldVersion
    如果version不对,就更新失败

    2.数据库中添加version字段

    ALTER TABLE user ADD COLUMN version INT

    image.png

    3.实体类添加version字段

    并添加 @Version 注解

    @Version
    @TableField(fill = FieldFill.INSERT)
    private Integer version;
    

    4.元对象处理器接口添加version的insert默认值

    @Override
    public void insertFill(MetaObject metaObject) {
        ......
        this.setFieldValByName("version", 1, metaObject);
    }
    

    特别说明:

    支持的数据类型只有 int,Integer,long,Long,Date,Timestamp,LocalDateTime
    整数类型下 newVersion = oldVersion + 1
    newVersion 会回写到 entity 中
    仅支持 updateById(id) 与 update(entity, wrapper) 方法
    在 update(entity, wrapper) 方法下, wrapper 不能复用!!!

    5.在 MybatisPlusConfig 中注册 Bean

    创建配置类

    package com.atguigu.mybatisplus.config;
    import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
    import org.mybatis.spring.annotation.MapperScan;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.transaction.annotation.EnableTransactionManagement;
    @EnableTransactionManagement
    @Configuration
    @MapperScan("com.atguigu.mybatis_plus.mapper")
    public class MybatisPlusConfig {
        /**
         * 乐观锁插件
         */
        @Bean
        public OptimisticLockerInterceptor optimisticLockerInterceptor() {
            return new OptimisticLockerInterceptor();
        }
    }
    

    相关文章

      网友评论

          本文标题:Mybatis-Plus乐观锁应用以及乐观锁讲解

          本文链接:https://www.haomeiwen.com/subject/vopxektx.html