mybatisPlus-自动填充

承接:springPlus-更新测试

创建时间,修改时间!这些操作一遍都是自动化完成的,我们不希望手动更新!

阿里巴巴开发手册:所有的数据库表:gmt_create,gmt_modified几乎所有的表都要配置上!而且需要自动化!

1 在user表中添加创建时间和修改时间的字段

2 在实体类中编写对应的属性并添加@TableField注解

src/main/java/com/lv/mybatis_plus/pojo/User.java

package com.lv.mybatis_plus.pojo;

import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.util.Date;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {
    @TableId(type = IdType.AUTO)
    private Long id;
    private String name;
    private Integer age;
    private String email;

    //字段添加填充内容
    @TableField(fill = FieldFill.INSERT)
    private Date createTime;

    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Date updateTime;
}

3 编写一个处理类

新建一个handler包,并在该包下创建一个MyMetaObjectHandler.java

src/main/java/com/lv/mybatis_plus/handler/MyMetaObjectHandler.java

package com.lv.mybatis_plus.handler;

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.util.Date;

@Slf4j
@Component //一定不要忘记把处理器加到IOC容器中!
public class MyMetaObjectHandler implements MetaObjectHandler {
    //插入时的填充策略
    @Override
    public void insertFill(MetaObject metaObject) {
        log.info("start insert fill....");
        // setFieldValByName(String fieldName, Object fieldVal, MetaObject metaObject)
        this.setFieldValByName("createTime",new Date(),metaObject);
        this.setFieldValByName("updateTime",new Date(),metaObject);
    }
    //更新时的填充策略
    @Override
    public void updateFill(MetaObject metaObject) {
        log.info("start update fill....");
        this.setFieldValByName("updateTime",new Date(),metaObject);
    }
}

4 运行插入测试方法

//测试插入
@Test
public void testInsert(){
    User user = new User();
    user.setName("最新插入");
    user.setAge(66);
    user.setEmail("1148397597@qq.com");
    int result = userMapper.insert(user); // mybatis-plus会帮我们自动生成id
    System.out.println(result); //受影响的行数
    System.out.println(user); //发现,id会自动回填
}

5 查看数据库

插入数据的两个时间字段自动填充成功

6 再修改一下更新方法,运行

//测试更新
@Test
public void testUpdate(){
    User user = new User();
    //通过条件自动拼接动态sql
    user.setId(1508697310695383045L);
    user.setName("修改最新插入");
    user.setAge(99);
    // 注意: updateById 参数是一个对象
    int i = userMapper.updateById(user);
    System.out.println(i);
}

7 查看数据库

修改时间的字段发生了变化,说明自动填充修改时间字段成功

8 数据库级别自动填充

这个方式不推荐使用,因为在实际工作中一般不允许修改数据库

参考地址:Navicat Premium之mysql添加自动更新时间戳

posted @ 2022-03-31 12:00  从0开始丿  阅读(140)  评论(0编辑  收藏  举报