确认

  • [X] 我的版本是最新版本, 我的版本号与 version 相同, 并且项目里无依赖冲突
  • [X] 我已经在 issue 中搜索过, 确认问题没有被提出过
  • [X] 我已经修改标题, 将标题中的 描述 替换为遇到的问题

功能改进

public class DatabaseCrudHandle implements MetaObjectHandler {
    @Override
    public void insertFill(MetaObject metaObject) {
        this.setFieldValByName("createTime", new Date(), metaObject);
        this.setFieldValByName("updateTime", new Date(), metaObject);
    }

    @Override
    public void updateFill(MetaObject metaObject) {
        this.setFieldValByName("updateTime", new Date(), metaObject);
    }
}

public class AbstractEntity implements Serializable {
    private static final long serialVersionUID = -5713805310868253100L;

    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
    @TableField(value = "create_time", fill = FieldFill.INSERT)
    public Date createTime;

    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss")
    @TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
    public Date updateTime;
}

我通过重写Handler方法并且配合TableField注解的方式现在成功的在数据创建service.save(entity)中实现create_time和update_time的自动填充

@RequestMapping("/insert")
public User insert() {
    User user = new User();
    user.setName("xxxxx");
    user.setAge(38);
    user.setAddress("北京");
    service.save(user);
    return user;
}

@RequestMapping(value = "/updateByWrapper", method = RequestMethod.POST)
public User updateByWrapper(User u) {
    UpdateWrapper<User> wrapper = new UpdateWrapper<User>();
    wrapper.set(Objects.nonNull(u.getName()), "name", u.getName());
    wrapper.set(Objects.nonNull(u.getAge()), "age", u.getAge());
    wrapper.set(Objects.nonNull(u.getAddress()), "address", u.getAddress());
    wrapper.eq("id", u.getId());
    service.update(wrapper);
    return u;
}

但是调用service.update(UpdateWapper)方法时遇到问题,如果我未指定create_time和update_time则此方法会自动修改create_time和update_time为当前时间,请问我的配置哪里有问题吗? 谢谢!

参考资料

No response

Comment From: miemieYaho

看文档

Comment From: lijia150

看文档

您好 我确实按照文档写的,我现在的问题是:根据文档中的说明“用update(UpdateWrapper)方法不会自动填充”,但是我现在的真实情况确实是自动填充了“createTime和updateTime字段为当前时间” MyBatis-Plus [功能改进]: 请问create_time和update_time自动填充的机制是怎样的

Comment From: miemieYaho

文档教你用setFieldValByName了吗?