Java如何優(yōu)雅保存公共字段數據

項目中創(chuàng)建人、創(chuàng)建時間等等公共字段抽取出來做成公共對象,更優(yōu)雅的保存,在實際開發(fā)業(yè)務的時候無需關心公共字段數據,更關注業(yè)務數據

1.準備Mybatis-plus 3.3.0(以上版本支持)

        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.4.0</version>
        </dependency>

2.準備抽取的公共對象

package com.hhjt.server.model.entity;

import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.TableField;
import lombok.Data;

import java.io.Serializable;
import java.util.Date;

/**
 * @ClassName : BaseEntity
 * @Description :
 * @Author : pengyifeng
 * @Date: 2020-10-21 20:08
 */
@Data
public class BaseEntity implements Serializable {

    private static final Long serialVersionUID = 1L;

    /**
     * 創(chuàng)建時間
     */
    @TableField(fill = FieldFill.INSERT)
    private Date createTime;
    /**
     * 創(chuàng)建人員
     */
    @TableField(fill = FieldFill.INSERT)
    private Integer createUser;
    /**
     * 更新時間
     */
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Date updateTime;
    /**
     * 更新人員
     */
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Integer updateUser;
    /**
     * 邏輯刪除字段 0 未刪除 1刪除
     */
    private Integer delFlag;
}

3.業(yè)務實體依賴公共對象

package com.hhjt.server.model.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;

import java.io.Serializable;
import java.util.Date;
import lombok.Data;

/**
 * 瞭望塔主表
 *
 * @author pengyifeng
 * @email pengyifeng@aliyun.com
 * @date 2021-08-17 16:00:39
 */
@Data
@TableName("bus_watchtower")
public class WatchtowerEntity extends BaseEntity implements Serializable {
    private static final long serialVersionUID = 1L;

    /**
     * 主鍵
     */
    @TableId(type = IdType.AUTO)
    private Integer id;
    /**
     * 瞭望塔名
     */
    private String name;
    /**
     * 經度
     */
    private String longitude;
    /**
     * 緯度
     */
    private String latitude;
    /**
     * 地址名稱
     */
    private String address;
    /**
     * 所屬行政區(qū)域code
     */
    private String areaCode;


}

4.需要注入實現接口MetaObjectHandler

  • 實現該接口,可以在特定場景(新增、修改)下優(yōu)雅的設置公共數據,并重寫相應的方法即可
package com.hhjt.server.config;

import cn.hutool.core.date.DateUtil;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import com.hhjt.server.utils.CertifyUtils;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;

import java.util.Date;

/**
 * @ClassName : MyMetaObjectHandler
 * @Description :
 * @Author : pengyifeng
 * @Date: 2020-10-21 20:12
 */
@Slf4j
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {

    @Override
    public void insertFill(MetaObject metaObject) {
        log.debug("新增數據自動填充開始...");
        this.strictInsertFill(metaObject, "createTime", Date.class, DateUtil.date());
        this.strictInsertFill(metaObject, "createUser", Integer.class, CertifyUtils.getUserId());
        this.strictUpdateFill(metaObject, "updateTime", Date.class, DateUtil.date());
        this.strictUpdateFill(metaObject, "updateUser", Integer.class, CertifyUtils.getUserId());
    }

    @Override
    public void updateFill(MetaObject metaObject) {
        log.debug("更新數據自動填充開始...");
        this.strictUpdateFill(metaObject, "updateTime", Date.class, DateUtil.date());
        this.strictUpdateFill(metaObject, "updateUser", Integer.class, CertifyUtils.getUserId());
    }
}

接口調用

    /**
     * 保存、更新
     */
    @PostMapping("/insertOrUpdate")
    public RespResult insertOrUpdate(@RequestBody WatchtowerParam param){
        WatchtowerEntity watchtowerEntity=new WatchtowerEntity();
        BeanUtil.copyProperties(param,watchtowerEntity);
        boolean update = watchtowerService.saveOrUpdate(watchtowerEntity);

        return update ? RespResult.respMessage(ResponseCode.RESULT_SUCCESS) : RespResult.respMessage(ResponseCode.RESULT_FAIL);
    }

調用接口

image

打印SQL

image

自動填充公共字段,這樣開發(fā)就只關系業(yè)務字段

關鍵注解

更多詳細注解官網了解:https://mp.baomidou.com/guide/annotation.html#tablefield

@TableField

  • 描述:字段注解(非主鍵)
  • | fill | Enum | 否 | FieldFill.DEFAULT | 字段自動填充策略 |
  • image
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容