02-mybatis-plus更新操作&自动填充&乐观锁

Posted 型男一枚

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了02-mybatis-plus更新操作&自动填充&乐观锁相关的知识,希望对你有一定的参考价值。

更新操作

同样我们直接调用mp提供的updateById进行更新操作,我们需要提供主键作为条件,当然我们也可以使用QueryWraper进行构造条件进行更新

//修改
@Test
public void testUpdate() {
    User user = new User();
    user.setId(1340868235401764865L);
    user.setName("lucymary");
    int count = userMapper.updateById(user);
    System.out.println(count);
}

自动填充

需求描述: 项目中经常会遇到一些数据,每次都使用相同的方式填充,例如记录的创建时间,更新时间等。 我们可以使用MyBatis-Plus的自动填充功能,完成这些字段的赋值工作

自动填充大致上可以分为插入时填充,更新时填充,也可以更新,插入时都填充,等等。
大致步骤为:

  1. 在我们需要自定填充的实体类属性上添加注解@TableField(fill = FieldFill.填充时间)
  2. 写一个Mp处理类实现MetaObjectHandler类继承实现插入时执行的,一个更新时执行的方法。

示例:比如我们项目加上字段create_time,创建的时间,update_time,更新的时间。

  1. 添加字段注解@TableField(fill = FieldFill.类型)
/**
     * Mp设置自动填充
     *
     * @TableField(fill = FieldFill.INSERT) 表示插入数据时填充
     * 同理有更新,插入,查询时,自动填充数据
     * 其次还需要实现一个接口MetaObjectHandler来编写插入,更新执行的方法
     */
    @TableField(fill = FieldFill.INSERT)
    private Date createTime;
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Date updateTime;
  1. 实现MetaObjectHandler交给spring接管
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
    /**
     * 插入数据时执行数据填充,自动完成
     * setFieldValByName(三个参数)
     * 第一个参数:那个属性名(与我们实体类添加注解修饰的属性相对应)
     * 第二个参数:填充的数据
     * 第三个参数:元数据对象(Mp 自动提供)
     *
     * @param metaObject
     */
    @Override
    public void insertFill(MetaObject metaObject) {
        this.setFieldValByName("createTime", new Date(), metaObject);
        this.setFieldValByName("updateTime", new Date(), metaObject);
        this.setFieldValByName("version", 1, metaObject);
        this.setFieldValByName("deleted", 0, metaObject);
    }

    /**
     * 和上面解释一样
     *
     * @param metaObject
     */
    @Override
    public void updateFill(MetaObject metaObject) {
        this.setFieldValByName("updateTime", new Date(), metaObject);
    }
}

乐观锁

乐观锁:即所有并发执行操作同一个数据,都可以进行操作,不需要阻塞等待其他线程完成操作数据,最后进行操作有效性检查。

主要适用场景:当要更新一条记录的时候,希望这条记录没有被别人更新,也就是说实现线程安全的数据更新 乐观锁实现方式:
取出记录时,获取当前version 更新时,带上这个version 执行更新时, set version = newVersion
where version = oldVersion 如果version不对,就更新失败

接下来介绍如何在Mybatis-Plus项目中,使用乐观锁:

  1. 第一我们需要在实体类上加上一个版本号信息,使用注解@Version用来记录进行修改的次数。
/**
     * 实体类属性加上注解@Version,指明是一个版本号属性
     * 插入时默认为版本号为1
     */
    @Version
    @TableField(fill = FieldFill.INSERT)
    private Integer version;
  1. 数据库同样加上这个字段
  2. 在Mp配置类中导入MP乐观锁的插件交给spring托管
@Configuration
@MapperScan("com.example.mapper")
public class MpConfig {
    /**
     * 配置Mp乐观锁的插件
     *
     * @return
     */
    @Bean
    public OptimisticLockerInterceptor optimisticLockerInterceptor() {
        return new OptimisticLockerInterceptor();
    }
  1. 直接使用即可

以上是关于02-mybatis-plus更新操作&自动填充&乐观锁的主要内容,如果未能解决你的问题,请参考以下文章

Vue 自定义指令使用更新后的 Dom(或 $el)

如何更新自定义布局通知操作?

部署项目 - 自定义操作更新

[JS DOM&BOM]自定义属性的操作

Vue - 在引导表自定义组件上更新数据

那些短小精悍的&奇葩的&令人感到惊讶的JavaScript代码----更新中