项目中创建人、创建时间等等公共字段抽取出来做成公共对象,更优雅的保存,在实际开发业务的时候无需关心公共字段数据,更关注业务数据
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;
/**
* 创建时间
*/
@TableField(fill = FieldFill.INSERT)
private Date createTime;
/**
* 创建人员
*/
@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.业务实体依赖公共对象
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;
/**
* 所属行政区域code
*/
private String areaCode;
}
4.需要注入实现接口MetaObjectHandler
- 实现该接口,可以在特定场景(新增、修改)下优雅的设置公共数据,并重写相应的方法即可
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
自动填充公共字段,这样开发就只关系业务字段
关键注解
更多详细注解官网了解:https://mp.baomidou.com/guide/annotation.html#tablefield
@TableField
- 描述:字段注解(非主键)
- | fill | Enum | 否 | FieldFill.DEFAULT | 字段自动填充策略 |
- image