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,难道乐观锁和自动填充会冲突?但是显然不可能,老师的视频中已经演示自动填充成功了。到底是为什么?求解!
查阅官网,发现要用了新的版本,加入了如下代码:
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
mybatisPlusInterceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
return mybatisPlusInterceptor;
}
添加了依赖:
<!-- MybatisPlusInterceptor乐观锁--> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-extension</artifactId> <version>3.5.2</version> </dependency> </dependencies>
问题完美解决!!
MyBatis-Plus进阶
23494 学习 · 118 问题
相似问题