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的自动填充功能,完成这些字段的赋值工作
自动填充大致上可以分为插入时填充,更新时填充,也可以更新,插入时都填充,等等。
大致步骤为:
- 在我们需要自定填充的实体类属性上添加注解@TableField(fill = FieldFill.填充时间)
- 写一个Mp处理类实现MetaObjectHandler类继承实现插入时执行的,一个更新时执行的方法。
示例:比如我们项目加上字段create_time,创建的时间,update_time,更新的时间。
- 添加字段注解@TableField(fill = FieldFill.类型)
/**
* Mp设置自动填充
*
* @TableField(fill = FieldFill.INSERT) 表示插入数据时填充
* 同理有更新,插入,查询时,自动填充数据
* 其次还需要实现一个接口MetaObjectHandler来编写插入,更新执行的方法
*/
@TableField(fill = FieldFill.INSERT)
private Date createTime;
@TableField(fill = FieldFill.INSERT_UPDATE)
private Date updateTime;
- 实现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项目中,使用乐观锁:
- 第一我们需要在实体类上加上一个版本号信息,使用注解@Version用来记录进行修改的次数。
/**
* 实体类属性加上注解@Version,指明是一个版本号属性
* 插入时默认为版本号为1
*/
@Version
@TableField(fill = FieldFill.INSERT)
private Integer version;
- 数据库同样加上这个字段
- 在Mp配置类中导入MP乐观锁的插件交给spring托管
@Configuration
@MapperScan("com.example.mapper")
public class MpConfig {
/**
* 配置Mp乐观锁的插件
*
* @return
*/
@Bean
public OptimisticLockerInterceptor optimisticLockerInterceptor() {
return new OptimisticLockerInterceptor();
}
- 直接使用即可
以上是关于02-mybatis-plus更新操作&自动填充&乐观锁的主要内容,如果未能解决你的问题,请参考以下文章