MyBatis-Plus-自动填充功能(学习笔记)
Posted 加辣椒了吗?
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MyBatis-Plus-自动填充功能(学习笔记)相关的知识,希望对你有一定的参考价值。
文章目录
一、自动填充功能原理
原理:
实现元对象处理器接口:com.baomidou.mybatisplus.core.handlers.MetaObjectHandler
二、使用步骤
此处举自动注入时间的 例子(但不止可以注入时间,也可以注入你自定义的东西):
mybatis-plus,数据库的引入和配置等此处省略
一共就三步,很简单:
1:实体类
@Data
@TableName("sys_user")
@AllArgsConstructor
@NoArgsConstructor
public class User implements UserDetails
private static final long serialVersionUID = 1L;
// 分配 ID(雪花算法)
@TableId(type = IdType.ASSIGN_ID)
private String id;
private String username;
private String phone;
private String password;
// 在插入实体类时更新时间(更新注意!这里需要标记为填充字段)
@TableField(value = "create_time",fill = FieldFill.INSERT)
private Date createTime;
// 在更新实体类时更新时间(注意!这里需要标记为填充字段)
@TableField(value = "update_time",fill = FieldFill.INSERT_UPDATE)
// 此处如果是LocalDateTime /Date,下面配置类就是LocalDateTime /Date。
private LocalDateTime updateTime;
对FieldFill 字段的说明:
public enum FieldFill
/**
* 默认不处理
*/
DEFAULT,
/**
* 插入填充字段
*/
INSERT,
/**
* 更新填充字段
*/
UPDATE,
/**
* 插入和更新填充字段
*/
INSERT_UPDATE
2:配置类
如果是LocalDateTime类:
@Slf4j
@Component
public class MyMetaObjectHandler implements MetaObjectHandler
@Override
public void insertFill(MetaObject metaObject)
log.info("start insert fill ....");
this.strictInsertFill(metaObject, "createTime", LocalDateTime.class, LocalDateTime.now()); // 起始版本 3.3.0(推荐使用)
// 或者
this.strictInsertFill(metaObject, "createTime", () -> LocalDateTime.now(), LocalDateTime.class); // 起始版本 3.3.3(推荐)
// 或者
this.fillStrategy(metaObject, "createTime", LocalDateTime.now()); // 也可以使用(3.3.0 该方法有bug)
@Override
public void updateFill(MetaObject metaObject)
log.info("start update fill ....");
this.strictUpdateFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now()); // 起始版本 3.3.0(推荐)
// 或者
this.strictUpdateFill(metaObject, "updateTime", () -> LocalDateTime.now(), LocalDateTime.class); // 起始版本 3.3.3(推荐)
// 或者
this.fillStrategy(metaObject, "updateTime", LocalDateTime.now()); // 也可以使用(3.3.0 该方法有bug)
如果是Date类:
@Slf4j
@Component
public class MyMetaObjectHandler implements MetaObjectHandler
//插入时候的填充策略
@Override
public void insertFill(MetaObject metaObject)
log.info("start insert fill ...."); //日志
//设置字段的值(String fieldName字段名,Object fieldVal要传递的值,MetaObject metaObject)
this.setFieldValByName("createTime",new Date(),metaObject);
this.setFieldValByName("updateTime",new Date(),metaObject);
//更新时间的填充策略
@Override
public void updateFill(MetaObject metaObject)
log.info("start update fill ....");
this.setFieldValByName("updateTime",new Date(),metaObject);
3:测试
在测试类里面进行测试:
// 测试插入
@Test
public void aa()
User user = new User();
user.setUsername("1");
user.setPassword("123456");
userMapper.insert(user);
// 测试更新
@Test
public void bb()
User user = new User();
user.setId("1");
user.setUsername("1");
user.setPassword("123456");
userMapper.updateById(user);
总结
如果想详细了解,还可以看看官方文档,就这样吧!!!
@作者:加辣椒了吗?
简介:憨批大学生一枚,喜欢在博客上记录自己的学习心得,也希望能够帮助到你们!
以上是关于MyBatis-Plus-自动填充功能(学习笔记)的主要内容,如果未能解决你的问题,请参考以下文章