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进阶
23265 学习 · 118 问题
相似问题