Mybatis plus的自动填充与乐观锁的实例详解(springboot)

 更新时间:2020年11月11日 10:03:51   作者:一起码代码  
这篇文章主要介绍了Mybatis plus的自动填充与乐观锁的实例详解(springboot),本文给大家介绍的非常详细对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

自动填充

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

1.表中加入create_time,update_time字段

在这里插入图片描述

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就可以。

测试插入:

在这里插入图片描述
在这里插入图片描述

测试修改:

在这里插入图片描述

在这里插入图片描述

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

乐观锁

当项目中出现并发操作时,会出现丢失更新问题,即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的自动填充与乐观锁(springboot)的文章就介绍到这了,更多相关Mybatis plus自动填充乐观锁内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SpringBoot解决跨域的超实用方案分享

    SpringBoot解决跨域的超实用方案分享

    这篇文章介绍了使用SpringBoot解决跨域问题的方法,并提供了详细的代码示例和解释,适合对跨域问题不太熟悉的读者,感兴趣的小伙伴跟着小编一起来学习吧
    2023-05-05
  • Java实现几种序列化方式总结

    Java实现几种序列化方式总结

    本篇文章主要介绍了Java实现几种序列化方式总结,包括Java原生以流的方法进行的序列化、Json序列化、FastJson序列化、Protobuff序列化,有兴趣的可以了解一下,
    2017-03-03
  • Spring之关于PropertyDescriptor的扩展剖析

    Spring之关于PropertyDescriptor的扩展剖析

    这篇文章主要介绍了Spring之关于PropertyDescriptor的扩展剖析,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • Java实现一个达达租车系统的步骤详解

    Java实现一个达达租车系统的步骤详解

    这篇文章主要给大家介绍了利用Java实现一个达达租车系统的步骤,文中给出了详细的实现思路和示例代码,并在文末给出了完整的源码供大家学习下载,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-04-04
  • SpringBoot注册Filter的两种实现方式

    SpringBoot注册Filter的两种实现方式

    这篇文章主要介绍了SpringBoot注册Filter的两种实现方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • Java内存泄漏问题的排查、优化与最佳实践

    Java内存泄漏问题的排查、优化与最佳实践

    在 Java 开发中,内存泄漏是一个常见且令人头疼的问题,内存泄漏指的是程序在运行过程中,已经不再使用的对象没有被及时释放,从而导致内存占用不断增加,最终可能导致程序崩溃或性能显著下降,本文给大家介绍了Java内存泄漏排查、优化与最佳实践
    2025-01-01
  • Redis缓存,泛型集合与json字符串的相互转换实例

    Redis缓存,泛型集合与json字符串的相互转换实例

    这篇文章主要介绍了Redis缓存,泛型集合与json字符串的相互转换实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-07-07
  • Kotlin基础教程之dataclass,objectclass,use函数,类扩展,socket

    Kotlin基础教程之dataclass,objectclass,use函数,类扩展,socket

    这篇文章主要介绍了Kotlin基础教程之dataclass,objectclass,use函数,类扩展,socket的相关资料,需要的朋友可以参考下
    2017-05-05
  • SpringBoot开发中使用DTO层的方法示例

    SpringBoot开发中使用DTO层的方法示例

    DTO层是在应用程序的业务逻辑层和数据访问层之间引入的一个中间层,用于在不同层之间传输数据,本文主要介绍了SpringBoot开发中使用DTO层,具有一定的参考价值,感兴趣的可以了解一下
    2024-06-06
  • java的Guava工具包介绍

    java的Guava工具包介绍

    Java开发的同学应该都使用或者听说过Google提供的Guava工具包。日常使用最多的肯定是集合相关的工具类,还有Guava cache,除了这些之外Guava还提供了很多有用的功能,鉴于日常想用的时候找不到,这里就梳理一下Guava中那些好用的工具类,想优化代码的时候不妨过来看看
    2021-04-04

最新评论