1. 程式人生 > 實用技巧 >mybatisplus自動填充

mybatisplus自動填充

mybatisplus自動填充

資料庫表的建立時間、修改時間,這些個操作一遍都是自動化完成的,我們不希望手動更新。這時候自動填充便可以發揮作用了。

1、方式一

資料庫級別(注意:不建議此方式,因為工作中不允許你修改資料庫)

步驟

  • 在表中新增欄位create_time, update_time,給欄位賦予預設值,在需要更新的欄位(update_time)選擇更新
  • 在實體類增加對應屬性

2、方式二

程式碼級別,建議使用

步驟

  • 在實體類需要自動填充的屬性上加註解

    package com.yl.bean;
    
    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.Data;
    import lombok.NoArgsConstructor;
    
    import java.io.Serializable;
    import java.util.Date;
    
    /**
     * 使用者實體類
     */
    @Data
    @NoArgsConstructor
    public class User implements Serializable {
        @TableId(type=IdType.AUTO)
        private Integer 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;
    }
    
    

    注意:資料庫要有對應欄位,不會自動給你生成欄位

  • 編寫處理器來處理自動填充註解

    package com.yl.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
    public class MyMetaObjectHandler implements MetaObjectHandler {
        /**
         * 插入元物件欄位填充(用於插入時對公共欄位的填充)
         *
         * @param metaObject 元物件
         */
        @Override
        public void insertFill(MetaObject metaObject) {
            //日誌輸出
            log.info("start insert fill.....");
            //欄位填充
            this.setFieldValByName("createTime",new Date(),metaObject);
            this.setFieldValByName("updateTime",new Date(),metaObject);
    
        }
    
        /**
         * 更新元物件欄位填充(用於更新時對公共欄位的填充)
         *
         * @param metaObject 元物件
         */
        @Override
        public void updateFill(MetaObject metaObject) {
            //日誌輸出
            log.info("start update fill.....");
            //欄位填充
            this.setFieldValByName("updateTime",new Date(),metaObject);
        }
    }