添加了乐观锁,updateTime不会自动填充。

来源:4-2 乐观锁实现及注意事项

athr

2022-07-13 23:21

添加了乐观锁,updateTime不会自动填充是怎么回事?

实体类:

//创建时间
    //设置自动填充
@TableField(fill = FieldFill.INSERT)
private LocalDateTime createTime;

//修改时间;
@TableField(fill = FieldFill.UPDATE)
private LocalDateTime updateTime;

//版本,乐观锁插件时会用到;默认值1,插入时不设置此字段;

@Version
private Integer version;


更新测试代码:

@Test
public void UpdateById() {
    int version=2;//假设取出了小舞的版本为1;
    User user = new User();
    user.setEmail("xw@baomidou.com");
    user.setAge(100018);
    user.setVersion(version);//添加了乐观锁,预期version会变为2;
    user.setId(1547000994376744961L);//小舞
    int rows = userMapper.updateById(user);
    System.out.println("影响行数:" + rows);

}


自动填充优化设置代码:

@Override
public void updateFill(MetaObject metaObject) {
    boolean fieldValByName = metaObject.hasSetter("updateTime");
    if (fieldValByName){
        System.out.println("updateFill~ ~ ~ ~ ~");
        this.setFieldValByName("updateTime",LocalDateTime.now(),metaObject);
    }

}

测试结果,updateTime不会自动填充;

updateFill~ ~ ~ ~ ~

DEBUG==>  Preparing: UPDATE user SET age=?, email=?, update_time=?, version=? WHERE id=? AND version=? AND deleted=0 

DEBUG==> Parameters: 100018(Integer), xw@baomidou.com(String), null, 3(Integer), 1547000994376744961(Long), 2(Integer)

DEBUG<==    Updates: 1

影响行数:1

我去测试过没有setVersion()的代码,会自动填充updateTime,难道乐观锁和自动填充会冲突?但是显然不可能,老师的视频中已经演示自动填充成功了。到底是为什么?求解!



写回答 关注

1回答

  • athr
    2022-07-13 23:33:47

    查阅官网,发现要用了新的版本,加入了如下代码:

    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
        mybatisPlusInterceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
        return mybatisPlusInterceptor;
    }

    http://img2.mukewang.com/62cee56d000119a018340955.jpg

    添加了依赖:

    <!--        MybatisPlusInterceptor乐观锁-->
            <dependency>
                <groupId>com.baomidou</groupId>
                <artifactId>mybatis-plus-extension</artifactId>
                <version>3.5.2</version>
            </dependency>
        </dependencies>


    问题完美解决!!

MyBatis-Plus进阶

MyBatis-Plus框架进阶课程

23265 学习 · 118 问题

查看课程

相似问题