MyBatis-Plus元数据拦截器

举报
S-X-S 发表于 2025/01/09 11:06:30 2025/01/09
【摘要】 1.sun-common-mybatisplus 模块创建一个MyMetaObjectHandler.javaimport com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;import org.apache.ibatis.reflection.MetaObject;import org.springframework.ste...

1.sun-common-mybatisplus 模块创建一个MyMetaObjectHandler.java

import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;

import java.util.Date;

/**
 * Description: 元数据拦截器
 * 注意事项:在插入和更新时,实体类必须具有fieldName这些字段,并且要有getter和setter方法
 * @Author sun
 * @Create 2024/7/10 14:25
 * @Version 1.0
 */
@Component // 注入容器
public class MyMetaObjectHandler implements MetaObjectHandler {

    /**
     * 插入时默认填充的数据
     * @param metaObject
     */
    @Override
    public void insertFill(MetaObject metaObject) {
        this.strictInsertFill(metaObject, "createBy", String.class, "handler/com/sunxiansheng");
        this.strictInsertFill(metaObject, "createTime", Date.class, new Date());
        this.strictInsertFill(metaObject, "deleteFlag", Integer.class, 0);
        this.strictInsertFill(metaObject, "version", Integer.class, 0);
    }

    /**
     * 更新时默认填充的数据
     * @param metaObject
     */
    @Override
    public void updateFill(MetaObject metaObject) {
        this.strictUpdateFill(metaObject, "updateBy", String.class, "handler/com/sunxiansheng");
        this.strictUpdateFill(metaObject, "updateTime", Date.class, new Date());
    }

}

2.注意事项

在插入和更新时,实体类必须具有fieldName这些字段,并且要有getter和setter方法

3.在po字段上添加@TableField注解

package com.sunxiansheng.user.entity.po;

import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;

import java.util.Date;

/**
 * Description: 封装从数据库中查询的数据
 * @Author sun
 * @Create 2024/7/9 16:02
 * @Version 1.0
 */
@TableName("user") // 指定表名
@Data
public class UserPo {

    @TableId(value = "id", type = IdType.AUTO) // 指定主键
    private Long id;

    private String name;

    private Integer age;

    @TableField(fill = FieldFill.INSERT)
    private String createBy;

    @TableField(fill = FieldFill.INSERT)
    private Date createTime;

    @TableField(fill = FieldFill.UPDATE)
    private String updateBy;

    @TableField(fill = FieldFill.UPDATE)
    private Date updateTime;

    @TableField(fill = FieldFill.INSERT)
    private Integer deleteFlag;

    @TableField(fill = FieldFill.INSERT)
    private Integer version;

}

4.测试插入,发现没有自动填充

1.原因是bean没有被注入

2.修改包名为UserApplicaion.java的扫描路径

CleanShot 2024-07-10 at 14.49.39@2x

CleanShot 2024-07-10 at 14.49.16@2x

3.bean成功注入

CleanShot 2024-07-10 at 15.05.01@2x

4.重新测试

CleanShot 2024-07-10 at 15.05.52@2x

CleanShot 2024-07-10 at 15.06.06@2x

5.抽取自动填充的属性作为基类

1.在commom模块编写

CleanShot 2024-07-10 at 16.32.11@2x

2.BaseEntity.java

package com.sunxiansheng.entity;

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

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

/**
 * Description: entity的基类,将一些需要自动填充的属性抽取过来
 * @Author sun
 * @Create 2024/7/10 16:28
 * @Version 1.0
 */
@Data
public class BaseEntity implements Serializable {

    @TableField(fill = FieldFill.INSERT)
    private String createBy;

    @TableField(fill = FieldFill.INSERT)
    private Date createTime;

    @TableField(fill = FieldFill.UPDATE)
    private String updateBy;

    @TableField(fill = FieldFill.UPDATE)
    private Date updateTime;

    @TableField(fill = FieldFill.INSERT)
    private Integer deleteFlag;

    @TableField(fill = FieldFill.INSERT)
    private Integer version;

}

3.修改UserPo.java,继承基类

CleanShot 2024-07-10 at 16.33.45@2x

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。