MetaObjectHandler
: 是mybatisplus提供的一个接口,,,这个接口定义了在执行插入和更新操作的时候的回调方法,,,允许你自定义实体对象的一些属性值,,比如: createTime,createBy,updateTime,updateBy 等
他有两个核心方法:
insertFill
: 在执行插入操作时,,用于填充实体对象的默认值,,标记了@TableField(fill=FieldFill.INSERT)
的字段就会被填充updateFill
:在执行更新操作时调用,用于填充实体对象的默认值
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@TableName(value = "cc_user")
public class User {private Integer id;private String username;@TableField(fill = FieldFill.INSERT)private String createBy;private String updateBy;private Date createTime;private Date updateTime;
}
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {@Overridepublic void insertFill(MetaObject metaObject) {System.out.println("插入填充方法被调用");this.setFieldValByName("createBy","waterkid",metaObject);this.setFieldValByName("updateBy","cc",metaObject);}@Overridepublic void updateFill(MetaObject metaObject) {System.out.println("插入填充方法被调用");this.setFieldValByName("createBy","waterkid",metaObject);this.setFieldValByName("updateBy","cc",metaObject);}
}
测试:
@Testvoid contextLoads() {int hehe = userMapper.insert(User.builder().username("hehe").build());}