首页 > 其他分享 >Mybatis-Plus中的MetaObjectHandler

Mybatis-Plus中的MetaObjectHandler

时间:2024-08-24 10:27:40浏览次数:11  
标签:metaObject 填充 userId Plus USER MetaObjectHandler Mybatis MetaObject

简介

MetaObjectHandler 是一个非常有用的组件,用于处理实体对象中的字段填充逻辑,比如自动填充创建时间、更新时间、创建人、修改人等字段。

组件介绍

MetaObjectHandler 接口允许在不修改业务代码的情况下,对实体类中的字段进行自动填充。这通常用于记录创建时间、更新时间、创建人、修改人等元数据信息。例如,在用户注册时自动设置创建时间,在更新用户信息时自动更新最后修改时间。

此处实现自动填充创建人、修改人
创建时间、修改时间等交给MySQL进行自动填充

使用

  • 实现 MetaObjectHandler 接口:
    首先需要创建一个类实现 MetaObjectHandler 接口,并重写其中的方法。
package com.zk.app.handler;

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

/**
 * @program: ZK
 * @description: 自定义mubatisplust填充
 * @author: zk
 * @create: 2024-07-17 11:30
 **/
@Component
public class ZKMetaObjectHandler implements MetaObjectHandler {
    /**
     * 创建人字段
     */
    private static final String CREATE_USER_ID = "createUserId";
    /**
     * 修改人字段
     */
    private static final String UPDATE_USER_ID = "updateUserId";

    @Override
    public void insertFill(MetaObject metaObject) {
        this.setUserId(metaObject, true);
    }

    @Override
    public void updateFill(MetaObject metaObject) {
        this.setUserId(metaObject, false);
    }

    private void setUserId(MetaObject metaObject, boolean isInsert) {
        Long userId = UserThreadLocalUtil.getUserId();
        if (userId > 0) {
            if (isInsert) {
                this.setFieldValByName(CREATE_USER_ID, userId, metaObject);
            }
            this.setFieldValByName(UPDATE_USER_ID, userId, metaObject);
        }
    }
}

通过insertFillupdateFill在新增/更新时进行自动填充
UserThreadLocalUtilThreadLocal,主要为存储当前线程的用户信息


结束

标签:metaObject,填充,userId,Plus,USER,MetaObjectHandler,Mybatis,MetaObject
From: https://www.cnblogs.com/zktww/p/18377477

相关文章

  • 【C++ Primer Plus习题】3.6
    问题:解答:#include<iostream>usingnamespacestd;intmain(){ floatmiles=0; floatgallons=0; floatgallon=0; cout<<"请输入驱车里程(单位为英里):"; cin>>miles; cout<<"请输入使用的汽油量(单位为加仑):"; cin>>g......
  • 实习生用mybatis的一个弱智问题硬控大哥半小时
    今天是我实习的第十天,顺利(其实一点也不顺利)完成了上次描述的接口任务。在距离下班不到10分钟的时候突然脑抽一下子,想启动一下写的项目。其实都已经测试没问题了,各个接口都是按预期输出,结果突然项目就启动失败了我瞬间傻眼开始疯狂流汗:好特码吓人啊...快速回想我都做了什么:1.把......
  • el-upload重复上传文件失效(Element-Plus)
    当指定了参数limit=1,再次上传就会无效以下是官方文档给出的解决方法示例通过on-exceed来定义超出限制时的行为<template><el-uploadref="uploadRef":limit="1":on-exceed="handleExceed":auto-upload="false"></el-upload>......
  • JDBC和Mybatis的区别
    jdbc和mybatis的区别功能和用途‌JDBC和MyBatis的主要区别在于它们的功能和用途。‌‌JDBC(JavaDatabaseConnectivity)是Java提供的一套用于连接数据库的接口规范,它允许Java程序与数据库进行交互。JDBC是一个底层的数据库访问技术,开发人员需要手动编写SQL语句并处理结果集的转......
  • 解决element-plus中的el-dialog弹框覆盖editor富文本组件下拉框的问题
    <template><el-dialog:visible.sync="dialogFormVisible"><!--dialog内容--><button@click="dialog">打开富文本编辑器</button><tinymce-editorref="tinyEditor"/></el-dialog>&......
  • MybatisPlus Caused by: org.apache.ibatis.builder.BuilderException: Error evalua
    报错信息:org.mybatis.spring.MyBatisSystemException:nullatorg.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:97)atorg.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessi......
  • MyBatis 源码解读:专栏导读与学习路线
    前言MyBatis是Java开发中广泛使用的持久层框架,其简洁的配置和强大的功能使得它在开发人员中备受欢迎。然而,MyBatis的背后隐藏着许多设计巧妙的架构和复杂的实现逻辑。通过源码解读,我们可以更深入地理解MyBatis的设计思想和工作原理,从而更好地应用它。本专栏将以源码......
  • springboot[4]_配置mybatis
    在springboot中使用mybatis1.建表在test库中,建立一张animal表,并存入三条数据。CREATETABLE`test`.`animal`(`id`int(11)NOTNULLAUTO_INCREMENT,`name`varchar(30)CHARACTERSETlatin1COLLATElatin1_swedish_ciNULLDEFAULTNULL,PRIMARYKEY(`id`)......
  • 浅谈Java MyBatis
    一、MyBatis的基本介绍  MyBatis本是apache的一个开源项目iBatis,2010年这个项目由apachesoftwarefoundation迁移到了googlecode,由谷歌托管,并且改名为MyBatis。2013年11月迁移到Github。    MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架。......
  • MybatisPlus
    MybatisPlus 一、介绍MybatisPlus是一个Mybatis的增强工具,为简化开发、提升效率而生。功能:自动生成单表的CRUD功能提供丰富的条件拼接方式全自动ORM类型持久层框架 二、简单使用导入mybatis-plus的启动器<dependencies>  <dependency>  ......