基于mybatis-plus3.5.7的公共实体类抽取

概括

项目中的实体类有若干公共属性,例如id、创建时间、修改时间等,基于mybatis-plus3.5.7设计基类,以实现所有实体类的修改时间、修改人id、修改人ip等字段随着实体的修改自动更新。

项目链接为:https://gitee.com/wang-yi-zp/zp-smart-enterprise-framework.git,后续会持续更新其他功能

详细步骤

依赖

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>${mp.version}</version>
</dependency>
    
<!--swagger-->
<dependency>
    <groupId>org.springdoc</groupId>
    <artifactId>springdoc-openapi-ui</artifactId>
    <version>${springdoc-version}</version>
</dependency>
    
<mp.version>3.5.7</mp.version>
<springdoc-version>1.6.7</springdoc-version>

抽取基类

在实体类中,你需要使用 @TableField 注解来标记哪些字段需要自动填充,并指定填充的策略.

  • INSERT:插入时填充字段
  • UPDATE:更新时填充字段
  • INSERT_UPDATE:插入和更新时填充字段
/**
 * 实体类基类
 *
 * @author ZP
 */
@Data
public abstract class BaseEntity {

    @Schema(description = "id")
    @TableId(value = "id", type = IdType.ASSIGN_ID)
    private Integer id;

    @Schema(description = "是否已删除")
    @TableField("deleted")
    @TableLogic
    private Boolean deleted;

    @Schema(description = "创建时间")
    @TableField(value = "create_time", fill = FieldFill.INSERT)
    private LocalDateTime createTime;

    @Schema(description = "更新时间")
    @TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;

    @Schema(description = "创建用户id")
    @TableField(fill = FieldFill.INSERT)
    private String createUserId;

    @Schema(description = "更新用户id")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private String updateUserId;

    @Schema(description = "创建用户ip")
    @TableField(fill = FieldFill.INSERT)
    private String createUserIp;

    @Schema(description = "更新用户ip")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private String updateUserIp;

}

mybatis-plus配置

创建GlobalMetaObjectHandler实现MetaObjectHandler,insertFill方法中实现实体创建后的操作,updateFill中实现实体更新后的操作,字段更新逻辑根据需要删减,注意一定要加@Component注解,交给spring容器管理

/**
 * GlobalMetaObjectHandler
 *
 * @author ZP
 */
@Slf4j
@Component
public class GlobalMetaObjectHandler implements MetaObjectHandler {

    private static final String CREATE_TIME_COL = "createTime";

    private static final String UPDATE_TIME_COL = "updateTime";

    private static final String CREATE_USER_ID = "createUserId";

    private static final String UPDATE_USER_ID = "updateUserId";

    private static final String CREATE_USER_IP = "createUserIp";

    private static final String UPDATE_USER_IP = "updateUserIp";


    @Override
    public void insertFill(MetaObject metaObject) {
        this.strictInsertFill(metaObject, CREATE_TIME_COL, LocalDateTime.class, LocalDateTime.now());
        this.strictInsertFill(metaObject, CREATE_USER_ID, String.class, SysUserUtil.getLoginUserId());
        this.strictInsertFill(metaObject, CREATE_USER_IP, String.class, SysUserUtil.getLoginUserIp());
        updateAll(metaObject);
    }

    @Override
    public void updateFill(MetaObject metaObject) {
        updateAll(metaObject);
    }

    private void updateAll(MetaObject metaObject) {
        this.strictUpdateFill(metaObject, UPDATE_TIME_COL, LocalDateTime.class, LocalDateTime.now());
        this.strictUpdateFill(metaObject, UPDATE_USER_ID, String.class, SysUserUtil.getLoginUserId());
        this.strictUpdateFill(metaObject, UPDATE_USER_IP, String.class, SysUserUtil.getLoginUserIp());
    }

}

使用

具体的实体类继承BaseEntity,实体类新建或者更新的时候,创建时间、更新时间、创建用户id、更新用户id、创建用户ip、更新用户ip就会自动刷新

参考资料

自动填充字段 | MyBatis-Plus (baomidou.com)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值