1. 自动填充
Mybatis-plus中可以使用注解对实体类中的一些时间属性自动填充。
1. 实体类上使用自动填充注解
@TableName("uuser") @Data public class User { @TableId(value = "uid",type = IdType.AUTO) private Long id; @TableField("name") private String username; private Integer age; private String email; private SexEnum sex; @TableLogic private Integer isDeleted; //mp自动填充 @TableField(fill = FieldFill.INSERT) private Timestamp createTime; @TableField(fill = FieldFill.INSERT_UPDATE) private Timestamp updateTime; }
2. 创建类实现 MetaObjectHandler, 并实现方法
@Component public class MyMetaObjectHandler implements MetaObjectHandler { //mp执行添加时,整个方法被执行 @Override public void insertFill(MetaObject metaObject) { this.setFieldValByName("createTime",new Timestamp(System.currentTimeMillis()),metaObject); this.setFieldValByName("updateTime",new Timestamp(System.currentTimeMillis()),metaObject); } //mp执行更新时,整个方法被执行 @Override public void updateFill(MetaObject metaObject) { this.setFieldValByName("updateTime",new Timestamp(System.currentTimeMillis()),metaObject); } }
3. 测试添加
@Test void testAdd(){ User user = new User(); user.setUsername("liuliu"); user.setAge(23); user.setEmail("liuliu@qq.com"); int result = userMapperr.insert(user); System.out.println("result " + result); }
当插入时没有设置时间属性,但是创建时间属性和更新时间属性也会被自动填充
4. 测试更新
@Test void testUpdate1(){ User user = new User(); user.setUsername("gugu"); user.setId(1517147456805093382L); int result = userMapperr.updateById(user); System.out.println("result " + result); }
更新时没有设置时间,更新时间属性会被自动更新
2. 乐观锁
当要更新一条记录的时候,希望这条记录没有被别人更新,也就是说实现线程安全的数据更新
乐观锁实现方式:
取出记录时,获取当前version;更新时,带上这个version;执行更新时, set version = newVersion where version = oldVersion;如果version不对,就更新失败
乐观锁实现流程
(1)在实体类上添加@version注解
//mp实现乐观锁 @Version @TableField(fill = FieldFill.INSERT) private Integer version;
(2)在数据库中添加version字段;
(3)创建配置类,注册乐观锁插进
@Configuration @MapperScan("com.lewang.mapper") public class MybatisPlusConfig { @Bean public MybatisPlusInterceptor mybatisPlusInterceptor(){ MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); //注册乐观锁插件 interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor()); return interceptor; } }
(4)测试
@Test void testAdd(){ User user = new User(); user.setUsername("huihui"); user.setAge(23); user.setEmail("huihui@qq.com"); int result = userMapperr.insert(user); System.out.println("result " + result); }
@Test void testOptimisticLocker(){ User user = userMapperr.selectById(1517147456805093383L); user.setUsername("hehe"); int result = userMapperr.updateById(user); System.out.println(result); }
先添加一个用户,version会自动填充1,当执行更新后,vesion会自动加1;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)