mybatis-plus实战-时间字段自动更新

项目中遇到需要业务更新自动同时更新表中对应的update_time字段(名字自己定)。

使用的mysql数据库,一开始修改表的字段,修改如下:

alter  table user modify column `modify_time` datetime not null on update current_timestamp comment '修改时间';

结果发现,如果更新的数不变,不过怎么更新,都不会刷新字段modify_time,只有本次数据跟上次有变化,才触发时间字段更新。这种半吊子的更新肯定是不能采纳的,必须显示设置modify_time值才行。

后面使用mybatis-plus的update方式,修改模型类Entity

@Data
public class User {

    @TableId
    private Long id;

    private String name;

    private Integer age;

    private String email;

    @TableField(value = "modify_time", update = "now()")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Timestamp modifyTime;
}

结果发现,还是无法更新modify。因为sql还是不带设置modify_time,网上找了一圈,都是上述设置的。后来发现TableField中有这个属性fill

    /**
     * 字段自动填充策略
     */
    FieldFill fill() default FieldFill.DEFAULT;

修改成INSERT_UPDATE,结果可行,打印sql如下:

JDBC Connection [com.alibaba.druid.proxy.jdbc.ConnectionProxyImpl@42a65d8d] will not be managed by Spring
==>  Preparing: UPDATE user SET name=?, age=?, email=?, modify_time=now() WHERE id=? 
==> Parameters: string(String), 1(Integer), string(String), 10(Long)
<==    Updates: 1

网上还有提到必须使用updateById,不能使用saveOrUpdate,这些感觉都是复制粘贴的,两个都可以的,凡是都要切身实验下,不然就不要写出来。

这里列下我执行成功的对应的mybatis-plus的版本跟spring版本

<parent>
    <groupId>org.springframework.bootgroupId>
    <artifactId>spring-boot-starter-parentartifactId>
    <version>2.2.6.RELEASEversion>
    <relativePath/> 
parent>

<dependency>
    <groupId>com.baomidougroupId>
    <artifactId>mybatis-plus-boot-starterartifactId>
    <version>3.1.0version>
dependency>

你可能感兴趣的:(springcloud)