深入浅析Mybatis plus中的乐观锁与自动填充
创始人
2024-11-19 03:02:52
0次

自动填充

项目中经常会遇到一些数据,每次都使用相同的方式填充,如插入时间、更新时间。Mybatis-plus的自动填充功能可以帮助我们快速实现。

1.表中加入create_time,update_time字段

深入浅析Mybatis plus中的乐观锁与自动填充

2.实体类注解填充字段

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

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

/**
* 默认不处理
/
DEFAULT,
/
*
* 插入填充字段
/
INSERT,
/
*
* 更新填充字段
/
UPDATE,
/
*
* 插入和更新填充字段
*/
INSERT_UPDATE

3.自定义实现类MyMetaObjectHandler

@Component
public class MyMetaObjectHandler implements MetaObjectHandler {

  /**
   *
   * 使用Mybatis-plus执行insert操作这个方法执行
   */
  @Override
  public void insertFill(MetaObject metaObject) {
      this.setFieldValByName("createTime",new Date(),metaObject);
      this.setFieldValByName("updateTime",new Date(),metaObject);
  }

  /**
   *
   * 使用Mybatis-plus执行update操作这个方法执行
   */
  @Override
  public void updateFill(MetaObject metaObject) {
    this.setFieldValByName("updateTime",new Date(),metaObject);
  }
}

setFieldValByName中有三个参数,第一个是字段名,第二个是要填充的数据,第三个参数写成metaObject就可以。

测试插入:

深入浅析Mybatis plus中的乐观锁与自动填充
深入浅析Mybatis plus中的乐观锁与自动填充

测试修改:

深入浅析Mybatis plus中的乐观锁与自动填充

深入浅析Mybatis plus中的乐观锁与自动填充

发现插入数据的时候会自动将这两个数据填充当前时间,更新的时候会只讲更新时间更改为当前时间。

乐观锁

当项目中出现并发操作时,会出现丢失更新问题,即A与B都查询到money字段为100,A修改money+900,改为1000。这时B也提交修改,money+50,改为150。A的修改就丢失了。
解决这种情况有两种方法:悲观锁和乐观锁,悲观锁就是只能一个一个操作,A操作的时候B只能等着,等A提交完成了B才能查询。
Mybatis-plus自带乐观锁:创建一个version字段,当A与B可以同时操作,当A提交的时候会看当前版本号与查询时候的版本号是否一致,一致才能提交成功,否则提交失败,提交成功会把当前版本号+1。

1.数据库中加入version字段,并在实体类中加入version属性。

加上 @Version注解

 @Version
  private Integer version;

2.编写配置类引入乐观锁插件

@Configuration
@MapperScan("com.zyw.mpdemo.mapper")
public class MpConfig {
  
  @Bean
  public OptimisticLockerInterceptor optimisticLockerInterceptor() {
    return new OptimisticLockerInterceptor();
  }

}

3.编写测试

用两个对象查询同一个id,做不同的修改,然后依次提交。

 @Override
  public void test(Account account) {
    Account account1 = accountMapper.selectById(1326188266440888321L);
    Account account2 = accountMapper.selectById(1326188266440888321L);
    account1.setMoney(account.getMoney());
    account2.setMoney(account.getMoney()+100);
    accountMapper.updateById(account1);
    accountMapper.updateById(account2);

  }

深入浅析Mybatis plus中的乐观锁与自动填充

深入浅析Mybatis plus中的乐观锁与自动填充

第一次成功,第二次提交失败,因为第二次提交的时候的版本号与查询到的不一致。

相关内容

热门资讯

空调连续工作多久需要停机休息 空调连续工作的时间取决于多个因素,包括空调的型号、功率、使用环境和维护情况等。一般来说,空调可以连续...
空调哪个符号是除湿的 空调除湿功能通常用一个水滴形状的符号表示。不同品牌和型号的空调遥控器可能会有所差异,但一般来说,除湿...
格力空调多长时间加一次氟利昂 1、一般情况下,空调对氟利昂的使用量是非常小的,所以在空调使用了四年左右的时候再考虑加也没问题。2、...
空调用多长时间需要加氟一次 一般情况下是五年。当出现以下这几种情况时,空调才需要加氟。1、空调的室内机和室外机各有两个接口,当接...
格调生活·C标思享荟:卡萨帝在... 9月12日的郑州龙湖金融岛,夜风轻拂,灯光璀璨。“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑...
品牌价值破千亿、高端份额持续领... 9月12日,“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑州站”在郑州龙湖金融岛举办。2026...
空调主板坏了修800还是换新的 空调主板坏了是修还是换新,需要考虑多个因素,以下是一些建议:1. 维修成本:如果维修费用较低,比如 ...
空调开多久需要休息多长时间 问题:空调开多久需要休息多长时间回答:1、在使用空调的过程中,一般空调开7~8个小时左右需要休息2~...
中央空调多长时间清洗一次 1、一般空调开机前清洗一次即可,空调开机中间时段再清洗一次,空调关机时清洗一次,这样比较合理。2、空...
中央空调氟利昂多久加一次 看空调制热和制冷程度,很多人的观点认为氟利昂必须一年放一次,其实这个观点是错误的,理解上面有点偏差,...