• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

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

springboot 搞代码 4年前 (2022-01-05) 22次浏览 已收录 0个评论

这篇文章主要介绍了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("<span style="color:transparent">来源gaodai#ma#com搞*!代#%^码$网</span>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); }

第一次成功,第二次提交失败,因为第二次提交的时候的版本号与查询到的不一致。

到此这篇关于Mybatis plus的自动填充与乐观锁(springboot)的文章就介绍到这了,更多相关Mybatis plus自动填充乐观锁内容请搜索gaodaima搞代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持gaodaima搞代码网

以上就是Mybatis plus的自动填充与乐观锁的实例详解(springboot)的详细内容,更多请关注gaodaima搞代码网其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Mybatis plus的自动填充与乐观锁的实例详解(springboot)

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址