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. 直接使用即可

使用乐观锁注意事项

我们需要需要对数据库进行查询操作,获取到我们的乐观锁version,之后再进行更新数据,乐观锁才会生效,否则直接改数据的话,会导致乐观锁不生效。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值