1. 程式人生 > 其它 >mybatisPlus-自動填充

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("[email protected]");
    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新增自動更新時間戳