Mybatis plus的自动填充与乐观锁的实例详解(springboot)
自动填充

项目中经常会遇到一些数据,每次都使用相同的方式填充,如插入时间、更新时间。Mybatis-plus的自动填充功能可以帮助我们快速实现。
1.表中加入create_time,update_time字段
2.实体类注解填充字段
@TableField(fill= FieldFill.INSERT) private Date createTime; @TableField(fill = FieldFill.INSERT_UPDATE) private Date updateTime;
/**
* 默认不处理
/
DEFAULT,
/*
* 插入填充字段
/
INSERT,
/*
* 更新填充字段
/
UPDATE,
/*
* 插入和更新填充字段
*/
INSERT_UPDATE
3.自定义实现类MyMetaObjectHandler
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
/**
*
* 使用Mybatis-plus执行insert操作这个方法执行
*/
@Override
public void insertFill(MetaObject metaObject) {
this.setFieldValByName("createTime",new Date(),metaObject);
this.setFieldValByName("updateTime",new Date(),metaObject);
}
/**
*
* 使用Mybatis-plus执行update操作这个方法执行
*/
@Override
public void updateFill(MetaObject metaObject) {
this.setFieldValByName("updateTime",new Date(),metaObject);
}
}
setFieldValByName中有三个参数,第一个是字段名,第二个是要填充的数据,第三个参数写成metaObject就可以。
测试插入:
测试修改:
发现插入数据的时候会自动将这两个数据填充当前时间,更新的时候会只讲更新时间更改为当前时间。
乐观锁
当项目中出现并发操作时,会出现丢失更新问题,即A与B都查询到money字段为100,A修改money+900,改为1000。这时B也提交修改,money+50,改为150。A的修改就丢失了。
解决这种情况有两种方法:悲观锁和乐观锁,悲观锁就是只能一个一个操作,A操作的时候B只能等着,等A提交完成了B才能查询。
Mybatis-plus自带乐观锁:创建一个version字段,当A与B可以同时操作,当A提交的时候会看当前版本号与查询时候的版本号是否一致,一致才能提交成功,否则提交失败,提交成功会把当前版本号+1。
1.数据库中加入version字段,并在实体类中加入version属性。
加上 @Version注解
@Version private Integer version;
2.编写配置类引入乐观锁插件
@Configuration
@MapperScan("com.zyw.mpdemo.mapper")
public class MpConfig {
@Bean
public OptimisticLockerInterceptor optimisticLockerInterceptor() {
return new OptimisticLockerInterceptor();
}
}
3.编写测试
用两个对象查询同一个id,做不同的修改,然后依次提交。
@Override
public void test(Account account) {
Account account1 = accountMapper.selectById(1326188266440888321L);
Account account2 = accountMapper.selectById(1326188266440888321L);
account1.setMoney(account.getMoney());
account2.setMoney(account.getMoney()+100);
accountMapper.updateById(account1);
accountMapper.updateById(account2);
}
第一次成功,第二次提交失败,因为第二次提交的时候的版本号与查询到的不一致。
代码知识SEO上一篇 : vue 实现element-ui中的加载中状态
下一篇 : Django自定义YamlField实现过程解析
-
SEO外包最佳选择国内专业的白帽SEO机构,熟知搜索算法,各行业企业站优化策略!
SEO公司
-
可定制SEO优化套餐基于整站优化与品牌搜索展现,定制个性化营销推广方案!
SEO套餐
-
SEO入门教程多年积累SEO实战案例,从新手到专家,从入门到精通,海量的SEO学习资料!
SEO教程
-
SEO项目资源高质量SEO项目资源,稀缺性外链,优质文案代写,老域名提权,云主机相关配置折扣!
SEO资源
-
SEO快速建站快速搭建符合搜索引擎友好的企业网站,协助备案,域名选择,服务器配置等相关服务!
SEO建站
-
快速搜索引擎优化建议没有任何SEO机构,可以承诺搜索引擎排名的具体位置,如果有,那么请您多注意!专业的SEO机构,一般情况下只能确保目标关键词进入到首页或者前几页,如果您有相关问题,欢迎咨询!