1. 程式人生 > 其它 >更新操作和自動填充功能

更新操作和自動填充功能

更新操作

比較簡單,實現原理是動態sql

    @Test
    void updateTest(){
        user user = new user();
        user.setId(1524653412236517378L);
        user.setAge(200);
        user.setEmail("[email protected]");
        userMapper.updateById(user); //沒有設定ID,不知道更新哪條資料,所以一定要設定ID
    }

自動填充

這個主要用於更新時間,和建立時間等,不需要認為設定的欄位

  1. 使用@TableField註解,提示plus哪寫欄位需要自動填充
public class user {


    @TableId(type = IdType.ID_WORKER)
    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;
}
  1. 還沒完,我們只是告訴了plus哪些需要填充,但填充的資料從哪裡來呢?
    這裡我們可以實現MetaObjectHandler介面,來填充資料
package top.luoking.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//將MyMetaObjectHandler新增到IOC容器中
public class MyMetaObjectHandler implements MetaObjectHandler {


    @Override  //插入時填充資料
    public void insertFill(MetaObject metaObject) {
        log.info("start insert fill ....");
        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);

    }
}
  1. 測試
    @Test
    void insertTest(){
        user user = new user();
        user.setAge(21);
        user.setEmail("[email protected]");
        user.setName("小落");
        userMapper.insert(user);
    }
    @Test
    void updateTest(){
        user user = new user();
        user.setId(1524657437254115330L);
        user.setAge(200);
        user.setEmail("[email protected]");
        userMapper.updateById(user); //沒有設定ID,不知道更新哪條資料,所以一定要設定ID
    }

insertTest

updateTest

達到了我們理想中的目的,在之後我們就可以利用自動填充來處理時間問題,我個人認為,蠻好用的。