本篇文章给大家分享的是有关深入浅析Mybatis +中的乐观锁与自动填充,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。
项目中经常会遇到一些数据,每次都使用相同的方式填充,如插入时间,更新时间.Mybatis-plus的自动填充功能可以帮助我们快速实现。
1。表中加入create_time, update_time字段
2。实体类注解填充字段
@TableField(填补=FieldFill.INSERT) 私人createTime日期; @TableField(填补=FieldFill.INSERT_UPDATE) 私人约会updateTime;
/* *
引用>
*默认不处理
/
默认情况下,
/
* *插入填充字段
/
插入,
/
* *更新填充字段
/
更新
/
* *插入和更新填充字段
*/
INSERT_UPDATE3。自定义实现类<代码> MyMetaObjectHandler 代码>
@ component 公共类MyMetaObjectHandler实现MetaObjectHandler {/* * * *使用Mybatis-plus执行插入操作这个方法执行 */@Override 公共空间insertFill (MetaObject MetaObject) { this.setFieldValByName (“createTime"新的日期(),metaObject); this.setFieldValByName (“updateTime"新的日期(),metaObject); }/* * * *使用Mybatis-plus执行更新操作这个方法执行 */@Override 公共空间updateFill (MetaObject MetaObject) { this.setFieldValByName (“updateTime"新的日期(),metaObject); } }setFieldValByName中有三个参数,第一个是字段名,第二个是要填充的数据,第三个参数写成metaObject就可以。
引用>测试插入:
测试修改:
发现插入数据的时候会自动将这两个数据填充当前时间,更新的时候会只讲更新时间更改为当前时间。
当项目中出现并发操作时,会出现丢失更新问题,即A与B都查询到钱字段为100,一个修改钱+ 900,改为1000。这时B也提交修改,钱+ 50,改为150.的修改就丢失了。
解决这种情况有两种方法:悲观锁和乐观锁,悲观锁就是只能一个一个操作,一个操作的时候B只能等着,等一个提交完成了B才能查询。
Mybatis-plus自带乐观锁:创建一个版本字段,当A与B可以同时操作,当一个提交的时候会看当前版本号与查询时候的版本号是否一致,一致才能提交成功,否则提交失败,提交成功会把当前版本号+ 1。1。数据库中加入版本字段,并在实体类中加入版本属性。
加上<代码> @Version 代码>注解
@Version 私人整数版本;2。编写配置类引入乐观锁插件
@ configuration @MapperScan (“com.zyw.mpdemo.mapper") 公开课MpConfig { @ bean 公共OptimisticLockerInterceptor OptimisticLockerInterceptor () { 返回新OptimisticLockerInterceptor (); } }3。编写测试
用两个对象查询同一个id,做不同的修改,然后依次提交。
引用>@Override 公共空白测试(账户账户){ 账户account1=accountMapper.selectById l (1326188266440888321); 账户account2=accountMapper.selectById l (1326188266440888321); account1.setMoney (account.getMoney ()); account2.setMoney (account.getMoney () + 100); accountMapper.updateById (account1); accountMapper.updateById (account2); }
第一次成功,第二次提交失败,因为第二次提交的时候的版本号与查询到的不一致。
深入浅析Mybatis +中的乐观锁与自动填充