mybatis-plus的扩展功能
Posted 暴躁的程序猿啊
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mybatis-plus的扩展功能相关的知识,希望对你有一定的参考价值。
自动填充
在我们的开发中 数据的创建时间 ,修改时间 !这些操作都是自动更新的 不需要我们手动操作
gmt_creat gmt_modify (修改时间) 这两个字段所有的表都要有 而且自动填充
Mybatis-plus中为我们提供了自动填充的扩展功能
一、字段上加入注解
//字段添加填充内容
@TableField(fill = FieldFill.INSERT)
private Date creatTime;
@TableField(fill = FieldFill.INSERT_UPDATE)
private Date updateTime;
二、创建一个填充的处理器
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
//插入时的填充策略
this.setFieldValByName("creatTime",new Date(),metaObject);
this.setFieldValByName("updateTime",new Date(),metaObject);
}
@Override
public void updateFill(MetaObject metaObject) {
//更新时的填充策略
this.setFieldValByName("updateTime",new Date(),metaObject);
}
}
测试
@Test
//插入
public void testInsert(){
User user = new User();
user.setAge(21);
user.setName("飞飞");
user.setEmail("12456789@qq.com");
int insert = userMapper.insert(user);
System.out.println(insert);
}
乐观锁
实现方式
取出记录时候获取当前version
更新时 带上version执行更新时 set version=newVersion where version =oldVersion
如果version不对就更新失败
测试乐观锁插件
1.给数据库增加version字段!
2.实体类加字段并加入注解
@Version
private Integer version;
3.在mp配置类中注册组件
//开启事务
@EnableTransactionManagement
@Configuration
@MapperScan("com.rpf.dao")
public class MyBatisPlusConfig {
/**
*注册乐观锁插件
*/
@Bean
public OptimisticLockerInterceptor optimisticLockerInterceptor(){
return new OptimisticLockerInterceptor();
}
}
测试
我们测试两种情况
第一种情况为单线程情况下的修改
@Test
public void TestLock1(){
//查询id为1的用户信息
User user = userMapper.selectById(1L);
//修改用户信息
user.setAge(23);
//执行更新操作
int update = userMapper.updateById(user);
}
我们看到已经成功了
测试多线程场景下的情况
第一个线程查询版本后 设置信息但并未提交 这时第二个线程获取了版本信息 且抢先提交了 等第一个线程提交时就会产生错误 因为有乐观锁
@Test
public void TestLock2(){
//查询id为1的用户信息
User user = userMapper.selectById(1L);
//修改用户信息
user.setAge(23);
//模拟另一个线程执行插队操作
User user1 = userMapper.selectById(1L);
user1.setAge(21);
int update1 = userMapper.updateById(user1);
//执行更新操作
//如果没有乐观锁就会覆盖插队线程的值
int update = userMapper.updateById(user);
}
产生了问题 第二个线程提交成功 第一个线程提交失败
以上是关于mybatis-plus的扩展功能的主要内容,如果未能解决你的问题,请参考以下文章
Mybatis-plus工具学习笔记---[基本概述,入门案例搭建,通用service接口使用]
Mybatis-plus工具学习笔记---[基本概述,入门案例搭建,通用service接口使用]
Mybatis-Plus:Sql 注⼊器⾃动填充功能逻辑删除
Mybatis-Plus:Sql 注⼊器⾃动填充功能逻辑删除