mybatisplus在新增或者修改时设置字段自动填充

1、需要实现元对象字段填充控制器抽象类,如下代码

package com.example.mybatisplus;

import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;

import java.time.LocalDateTime;

/**
 * mybatisplus字段填充器的实现
 * 实现公共字段的自动写入
 */
@Slf4j
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
    @Override
    public void insertFill(MetaObject metaObject) {
        this.setFieldValByName("createdAt",LocalDateTime.now(),metaObject);
        this.setFieldValByName("updatedAt",LocalDateTime.now(),metaObject);
    }

    @Override
    public void updateFill(MetaObject metaObject) {
        this.setFieldValByName("updatedAt",LocalDateTime.now(),metaObject);
    }
}

fieldName要注意对应的生成的实体字段,不是数据库对应字段,否则无效

2、在生成的实体字段,@TableField增加fill填充,并写入填充的时机是新增还是修改

    @TableField(value = "CREATED_AT",fill = FieldFill.INSERT)
    private LocalDateTime createdAt;

    @TableField(value = "UPDATED_AT", fill = FieldFill.INSERT_UPDATE )
    private LocalDateTime updatedAt;

在此过程中可能会出现的错:

修改或者插入的时候报类型无效,java.sql.SQLException: 无效的列类型: 1111

分析原因,可能是某个字段的值为null,要么就是字段填充器没有设置默认值,但是又在@TableField设置了自动填充

综上,需要字段填充默认值,就一定需要实现MetaObjectHandler类中的方法

你可能感兴趣的:(mybatis-plus实践,后端,mybatisplus)