首页 > 其他分享 >mybatisPlus-乐观锁

mybatisPlus-乐观锁

时间:2023-04-15 13:44:42浏览次数:61  
标签:mybatisplus mybatisPlus 乐观 baomidou user import com annotation

数据库中添加version字段

 

 自定义配置类中,添加乐观锁的拦截器

package com.atguigu.config;

import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@MapperScan(basePackages = "com.atguigu.mapper")
@Configuration
public class Mpconfig {

    //乐观锁插件
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor(){
        //1 创建MybatisPlusInterceptor拦截器对象
        MybatisPlusInterceptor mpInterceptor=new MybatisPlusInterceptor();
        //2 添加乐观锁拦截器
        mpInterceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());

        return mpInterceptor;
    }
}

 

MyMetaObjectHandler类中设置添加version时的默认值

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

实体类上verison自动添加注解

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.Version;
import lombok.Data;

import java.util.Date;
import static com.baomidou.mybatisplus.annotation.FieldFill.*;

@Data
public class User {

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

 

测试代码

当执行更新sql时,version版本号会自动+1

  @Test
    public void updateUserById(){
        //先查询再更新
        User user = userMapper.selectById(11L);
        user.setName("hello");
        //更新时会比对当前版本号,相同会更新版本号+1
        int i = userMapper.updateById(user);
        System.out.println(i);
    }

 

 下面场景会更新失败

携带版本号为0,此时库里面版本号为2

  @Test
    public void updateUserById(){
        User user = userMapper.selectById(11L);
        user.setName("hello");
        user.setVersion(0);

        int i = userMapper.updateById(user);
        System.out.println(i);
    }

 

 

标签:mybatisplus,mybatisPlus,乐观,baomidou,user,import,com,annotation
From: https://www.cnblogs.com/ixtao/p/17320971.html

相关文章

  • mybatisPlus-自动填充
      实体类importcom.baomidou.mybatisplus.annotation.IdType;importcom.baomidou.mybatisplus.annotation.TableField;importcom.baomidou.mybatisplus.annotation.TableId;importlombok.Data;importjava.util.Date;importstaticcom.baomidou.mybatisplus.ann......
  • SpringBoot 集成 MybatisPlus 九——逻辑删除
    1逻辑删除的概念逻辑删除不会在数据库中删除数据,只是通过一个字段用来标识被删除的记录,数据仍然保存在数据库中。在实际的工作当中,因为数据非常重要,为了防止因用户误操作删除数据后无法恢复的问题,我们通常不会对数据做物理删除,即将数据从数据库中直接删除。而是多采用逻辑删除的方......
  • SpringBoot 集成 MybatisPlus 八——插件
    1Mybatis插件机制Mybatis插件是对Executor、StatementHandler、ParameterHandler、ResultSetHandler这四个接口上的方法进行拦截,利用JDK动态代理机制,为这些接口的实现类创建代理对象,在执行方法时,先去执行代理对象的方法,从而执行自己编写的拦截逻辑。ExecutorMyBatis的内部执行器......
  • MyBatisPlus解决逻辑删除与唯一索引的兼容问题
    需求背景比如有张用户表,在插入或者更新数据的时候,我们需要用户名称(username),不能重复。我们首先考虑的是给该字段创建唯一索引createuniqueindexuni_usernameonuser(username)似乎这样就可以了,然而事情并没有那么简单。因为我们表中的数据在删除的时候不会真的的删......
  • 负荷需求响应模型 基于Logistic函数 采用matlab编程,考虑电价激励下的乐观响应和悲观响
    负荷需求响应模型基于Logistic函数采用matlab编程,考虑电价激励下的乐观响应和悲观响应,利用负荷需求响应模型得到峰转平、平转谷的实际负荷转移率,从而得到基于Logistic函数的负荷转移对比,程序运行稳定ID:6450676853349722......
  • 老冯笔记MyBatisPlus&lombok
    1.MyBatis-Plus介绍参考资料官方指南:https://baomidou.com/pages/24112f/#特性官方配置:https://baomidou.com/pages/56bac0/GitHub:https://github.com/baomidou/mybatis-plus特点只做增强不做改变,引入它不会对现有工程产生影响,如丝般顺滑。只需简单配置,即可快速进行......
  • mybatisPlus-增删改查
    引入依赖<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.or......
  • SpringBoot 集成 MybatisPlus 六——ActiveRecord 增、删、改
    1向表中插入记录1.1插入所有列在创建实体对象时,指定所有字段的内容,包括ID列。@TestpublicvoidtestAddUser(){Useruser=newUser(20,"成吉思汗","男","一代天骄");booleanres=user.insert();System.out.println(res);}调用MyBatisPlus时,后台执行的......
  • SpringBoot 集成 MybatisPlus 五——ActiveRecord
    1什么是ActiveRecordActiveRecord(活动记录),是一种领域模型模式,特点是一个模型类对应关系型数据库中的一个表,而模型类的一个实例对应表中的一行记录。在ActiveRecord模式中,对象中既有持久存储的数据,也有针对数据的操作,ActiveRecord模式把数据增删改查的逻辑作为对象的一......
  • MyBatisPlus——代码生成器
    代码生成器快速生成各项代码步骤创建Generator类,并创建main方法创建代码生成器AutoGeneratorautoGenerator=newAutoGenerator();连接要生成实体类的数据库DataSourceConfigdataSource=newDataSourceConfig();dataSource.setDriverName(......