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);
    }

总结

如果想详细了解,还可以看看官方文档,就这样吧!!!

@作者:加辣椒了吗?
简介:憨批大学生一枚,喜欢在博客上记录自己的学习心得,也希望能够帮助到你们!
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

加辣椒了吗?

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值