使用mybatis plus自动填充值,只适用于使用mybatis plus自带方法,不适用于手写mapper填充
此操作也不适用于.lambdaUpdate(),使用.lambdaUpdate()如果要更新需要特殊操作
// 不走自定义更新插入拦截
topicTypeService.lambdaUpdate().eq(Model::getId, 1)
.set(Model::getTopicTypeName, "测试").update();
// 走自定义更新插入拦截
topicTypeService.lambdaUpdate().eq(Model::getId, 1)
.set(Model::getTopicTypeName, "测试").update(new Model());
实体
FieldFill.INSERT:插入操作填充。
FieldFill.INSERT_UPDATE:插入和更新操作都填充。
@ApiModelProperty(value = "创建人id")
@TableField(value = "create_by_id", fill = FieldFill.INSERT)
private Long createById;
@ApiModelProperty(value = "创建人")
@TableField(value = "create_by_name", fill = FieldFill.INSERT)
private String createByName;
@ApiModelProperty(value = "创建时间")
@TableField(value = "create_time", fill = FieldFill.INSERT)
private Date createTime;
@ApiModelProperty(value = "更新人id")
@TableField(value = "update_by_id", fill = FieldFill.INSERT_UPDATE)
private Long updateById;
@ApiModelProperty(value = "更新人")
@TableField(value = "update_by_name", fill = FieldFill.INSERT_UPDATE)
private String updateByName;
@ApiModelProperty(value = "更新时间")
@TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
private Date updateTime;
@ApiModelProperty(value = "删除标识")
@TableField(value = "del_flag", fill = FieldFill.INSERT)
private String delFlag;
自定义拦截器
@Component
public class MyDetaObjectHander implements MetaObjectHandler {
/**
* 插入填充
*
* @param metaObject
*/
@Override
public void insertFill(MetaObject metaObject) {
boolean haveWebAuth = true;
try {
// 判断是否有登录信息填充
Long userId = SecurityUtils.getUserId();
} catch (Exception e) {
haveWebAuth = false;
}
// 判断实体是否有该属性
if (metaObject.hasGetter("createTime")) {
Object createTime = getFieldValByName("createTime", metaObject);
if (ObjectUtils.isEmpty(createTime)) {
this.setFieldValByName("createTime", new Date(), metaObject);
}
}
if (metaObject.hasGetter("createByName")) {
Object createBy = getFieldValByName("createByName", metaObject);
if (ObjectUtils.isEmpty(createBy) && haveWebAuth) {
this.setFieldValByName("createByName", SecurityUtils.getNickName(), metaObject);
}
}
if (metaObject.hasGetter("createById")) {
Object createById = getFieldValByName("createById", metaObject);
if (ObjectUtils.isEmpty(createById)) {
if (haveWebAuth) {
this.setFieldValByName("createById", SecurityUtils.getUserId(), metaObject);
}
}
}
if (metaObject.hasGetter("delFlag")) {
Object delFlag = getFieldValByName("delFlag", metaObject);
if (ObjectUtils.isEmpty(delFlag)) {
this.setFieldValByName("delFlag", SqlConstant.NOT_DELETE_FLAG, metaObject);
}
}
if (metaObject.hasGetter("updateTime")) {
Object updateTime = getFieldValByName("updateTime", metaObject);
if (ObjectUtils.isEmpty(updateTime)) {
this.setFieldValByName("updateTime", new Date(), metaObject);
}
}
if (metaObject.hasGetter("updateByName")) {
Object updateBy = getFieldValByName("updateByName", metaObject);
if (ObjectUtils.isEmpty(updateBy) && haveWebAuth) {
this.setFieldValByName("updateByName", SecurityUtils.getNickName(), metaObject);
}
}
if (metaObject.hasGetter("updateById")) {
Object updateById = getFieldValByName("updateById", metaObject);
if (ObjectUtils.isEmpty(updateById)) {
if (haveWebAuth) {
this.setFieldValByName("updateById", SecurityUtils.getUserId(), metaObject);
}
}
}
}
/**
* 更新填充
*
* @param metaObject
*/
@Override
public void updateFill(MetaObject metaObject) {
boolean haveWebAuth = true;
try {
Long userId = SecurityUtils.getUserId();
} catch (Exception e) {
haveWebAuth = false;
}
if (metaObject.hasGetter("updateTime")) {
Object updateTime = getFieldValByName("updateTime", metaObject);
if (ObjectUtils.isEmpty(updateTime)) {
this.setFieldValByName("updateTime", new Date(), metaObject);
}
}
if (metaObject.hasGetter("updateByName")) {
Object updateBy = getFieldValByName("updateByName", metaObject);
if (ObjectUtils.isEmpty(updateBy) && haveWebAuth) {
this.setFieldValByName("updateByName", SecurityUtils.getNickName(), metaObject);
}
}
if (metaObject.hasGetter("updateById")) {
Object updateById = getFieldValByName("updateById", metaObject);
if (ObjectUtils.isEmpty(updateById)) {
if (haveWebAuth) {
this.setFieldValByName("updateById", SecurityUtils.getUserId(), metaObject);
}
}
}
}
}

文章讲述了在MybatisPlus中,如何使用自动填充功能,但强调了该功能仅适用于mybatisplus内置方法,不适用于lambdaUpdate,以及自定义拦截器对insert和update操作的区别处理。
737

被折叠的 条评论
为什么被折叠?



