首页 > 其他分享 >MetaObjectHandler探秘:了解对象元数据处理的奥秘

MetaObjectHandler探秘:了解对象元数据处理的奥秘

时间:2024-05-29 12:30:16浏览次数:22  
标签:metaObject description 填充 private MetaObjectHandler 数据处理 探秘 Schema

前言

大家好,我是Front_Yue,本篇文章将介绍spring boot项目中操作数据时如何自动填充创建人,创建时间等公共字段。

在 MyBatis-Plus 中,MetaObjectHandler 是一个用于处理实体对象的元对象的接口。它允许我们在插入、更新、删除等操作之前或之后,对实体对象进行自定义处理。通过 MetaObjectHandler,我们可以实现如自动填充创建时间、更新时间、删除标记等功能。

本文将详细介绍 MetaObjectHandler 的原理以及使用方式。

正文内容

一、MetaObjectHandler 原理

MetaObjectHandler 的原理主要包括以下几个方面:

1. 注册 MetaObjectHandler

在 MyBatis-Plus 的全局配置中,我们可以注册一个或多个 MetaObjectHandler 实现类。这些实现类将会在执行 CRUD 操作时被调用。

2. 拦截 CRUD 操作

MetaObjectHandler 会在执行插入、更新、删除等 CRUD 操作之前或之后进行拦截。我们可以在这些方法中对实体对象进行自定义处理。

3. 自定义处理

在 MetaObjectHandler 的方法中,我们可以根据需要对实体对象的属性进行修改或赋值。例如,自动填充创建时间、更新时间、删除标记等。

二、MetaObjectHandler 使用方式

以下是使用 MetaObjectHandler 的具体步骤:

1. 创建 MetaObjectHandler 实现类

首先,我们需要创建一个实现 MetaObjectHandler 接口的类。在这个类中,我们可以根据需要重写其中的方法。

package com.frontyue.common.core.handler;
import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import com.frontyue.common.core.domain.LoginUser;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.time.LocalDateTime;

/**
 *  MyMetaObjectHandler 
 */
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
    @Autowired
    private LoginUser loginUser;

    @Override
    public void insertFill(MetaObject metaObject) {
        setFieldValByName("createTime", LocalDateTime.now(), metaObject);
        setFieldValByName("createBy", loginUser.getUsername(), metaObject);
    }
    @Override
    public void updateFill(MetaObject metaObject) {
        setFieldValByName("updateTime", LocalDateTime.now(), metaObject);
        setFieldValByName("updateBy", loginUser.getUsername(), metaObject);
    }
}

在上面的示例中,我们使用了 @Component 注解,确保MyMetaObjectHandler类被 Spring 管理。我们创建了一个名为MyMetaObjectHandler 的类,并实现了 MetaObjectHandler 接口。在insertFill方法中,我们自动填充了创建人和创建时间。在 updateFill方法中,我们自动更新数据库表中更新时间与更新人。

2. 使用 MetaObjectHandler

在实体类中,添加创建人、创建时间、更新人、更新时间字段:

import java.time.LocalDateTime;

public class User {
    private static final long serialVersionUID = 1L;

    @Schema(description = "用户ID")
    @TableId(value = "user_id", type = IdType.AUTO)
    private Integer userId;

    @Schema(description = "用户名")
    @TableField("username")
    private String username;

    @Schema(description = "用户昵称")
    @TableField("nick_name")
    private String nickName;

    @Schema(description = "密码")
    @TableField("password")
    private String password;
    /**
     * 创建者
     */
    @Schema(description = "创建者")
    @TableField(value = "create_by" , fill = FieldFill.INSERT)
    private String createBy;

    /**
     * 创建时间
     */
    @Schema(description = "创建时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss" )
    @TableField(value = "create_time" , fill = FieldFill.INSERT)
    private LocalDateTime  createTime;

    /**
     * 更新者
     */
    @Schema(description = "更新者")
    @TableField(value = "update_by" , fill = FieldFill.INSERT_UPDATE)
    private String updateBy;

    /**
     * 更新时间
     */
    @Schema(description = "更新时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss" )
    @TableField(value = "update_time" , fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;

    /**
     * 备注
     */
    @Schema(description = "备注")
    @TableField("remark" )
    private String remark;
}

通过以上配置,我们在操作数据库时,就不用可以去处理这些字段。

请在此添加图片描述

三、自定义填充规则

在上面的示例中,我们使用了 MyBatis-Plus 提供的 strictInsertFill 和 strictUpdateFill 方法来自动填充创建时间和更新时间。实际上,我们还可以根据需要自定义填充规则。

例如,我们可以在 MyMetaObjectHandler 类中添加一个新的方法,用于自动填充删除标记:

@Override
public void deleteFill(MetaObject metaObject) {
    this.strictDeleteFill(metaObject, "deleteFlag", Integer.class, 1);
}

在上面的示例中,我们使用了 strictDeleteFill 方法来自动填充删除标记。当我们执行删除操作时,MyMetaObjectHandler 的 deleteFill 方法将会被自动调用,从而实现自动填充删除标记的功能。

总结

总之,MetaObjectHandler 是 MyBatis-Plus 中一个非常实用的功能,它可以帮助我们在执行 CRUD 操作时自动进行一些常见的操作,如自动填充创建时间、更新时间、删除标记等。通过简单的配置和编写自定义的 MetaObjectHandler 实现类,我们可以轻松地实现这些功能。

最后,感谢各位小伙伴的支持陪伴,如果你喜欢我的博客内容,认可我的观点和经验分享,请点赞、收藏和评论,这将是对我最大的鼓励和支持。同时,也欢迎大家提出宝贵的意见和建议,让我能够更好地改进和完善我的文章。谢谢!

标签:metaObject,description,填充,private,MetaObjectHandler,数据处理,探秘,Schema
From: https://blog.csdn.net/weixin_47970498/article/details/139292108

相关文章

  • 云计算-交互式数据处理 (Interactive Data Processing)
    AWSGlueDataBrew(AWSGlueDataBrew)        数据预处理是任何数据分析任务之前的重要步骤。AWSGlueDataBrew是一个可视化工具,允许我们预处理数据,包括清洗和规范化数据。此AWS服务提供许多数据准备功能,包括分组、联接、过滤、重新采样、排序、处理缺失和重复实......
  • 使用数据处理函数
    selectvend_name,Upper(vend_name)asvend_name_upcasefromvendorsorderbyvend_nameLeft()Lenght()Locate()Lower()LTrim()Right()RTrim()Trim()Soundex()selectcust_name,cust_contactfromcustomerswherecust_contact='Y.Lie'发音......
  • ChatGPT结合ArcGIS,快速实现空间分析+制图+遥感数据处理
    在数字化和智能化的浪潮中,GIS(地理信息系统)和GPT(生成式预训练模型)的结合正日益成为推动科研、城市规划、环境监测等领域发展的关键技术。GIS以其强大的空间数据处理、先进的空间分析工具、灵活的地图制作与可视化能力、广泛的扩展性和定制性,成为地理信息科学的核心工具。它在多......
  • 边缘计算|Hadoop——边缘计算,有没有对应的软件?例如数据中心或云计算环境进行数据处理
    边缘计算确实没有直接对应于Hadoop这样的单一软件框架,因为边缘计算更多的是一个概念或技术架构,它涵盖了在网络的边缘(即设备或数据源附近)进行数据处理和计算的能力。然而,这并不意味着边缘计算没有相应的软件支持或解决方案。在边缘计算环境中,通常会使用各种软件、工具和框架来支持......
  • PyTorch的数据处理
    ......
  • Python数据处理训练
    (一)、中国大学排名数据分析与可视化;(写到实验报告中)【源代码程序】importrequestsfrombs4importBeautifulSoupimportmatplotlib.pyplotasplt #URL模板,按年份爬取数据URL_TEMPLATE="https://www.shanghairanking.cn/rankings/bcur/{}"  #爬取数据函数deff......
  • el-table表格合并头,多级表头,合并列,合并列数据处理(2024-05-22)
    1、多级表头合并表头数据结构比较复杂的时候,可使用多级表头来展现数据的层次关系。<el-table-column>标签按照合并的层级放置标签即可实现,数据是正常的二维数据。<template><el-table:data="tableData"style="width:100%"><el-table-columnprop="......
  • 【AI学习】对LLM训练中数据处理的再认识
    最近读了几篇文章,对于LLM模型中的数据处理,有了一些再认识。这几篇文章分别是《世界顶级风投a16z创始人对谈AI与创业》、《BenThompson对NatFriedman和DanielGross的采访》、《AI教父Hinton最新万字精彩访谈:直觉,AI创新的洞见和思考,未来》有一些观点:1、训练模型的数......
  • 探秘咖啡之旅:一杯香醇,一世情缘
    在这个快节奏的时代,每个人都渴望有一处属于自己的小天地,能够暂时逃离喧嚣,享受片刻的宁静与美好。而对我来说,这个小天地,就是那一杯香醇的咖啡。每一次品尝咖啡,都仿佛是一场奇妙的旅行。从研磨咖啡豆的那一刻起,空气中便弥漫着淡淡的香气,令人心旷神怡。那香气仿佛有着神奇的魔力,能够......
  • KubeEdge v1.17.0发布!数据处理能力与易用性全面提升
    本文分享自华为云社区《KubeEdgev1.17.0发布!数据处理能力与易用性全面提升》 ,作者:云容器大未来。KubeEdge社区v1.17.0版本正式发布。新版本为边缘节点和设备带来了更多的新能力,同时持续在易用性上做了提升。KubeEdgev1.17.0新增特性:支持边缘Pods使用In......