mybatisplus字段注入MetaObjectHandler扫描不到我的指定填充字段

本文主要是介绍mybatisplus字段注入MetaObjectHandler扫描不到我的指定填充字段,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

使用mybatisplus自带的字段填充策略注入值的时候,发现并没有扫描到我的指定字段。

1. 初始代码


@Component
@Slf4j
public class MyMetaObjectHandler implements MetaObjectHandler {private static final String createByFiled = "createBy";private static final String updateByFiled = "updateBy";@Overridepublic void updateFill(MetaObject metaObject) {Object originalObject = metaObject.getOriginalObject();// 有这个属性 才执行if (metaObject.hasSetter("updateTime") ) {this.setUpdateFieldValByName( "updateTime", LocalDateTime.now(),metaObject);}boolean b = metaObject.hasGetter("updateBy");// 返回的是falseObject fieldValByName = getFieldValByName(updateByFiled, metaObject);if (b && fieldValByName == null){// 有这个属性 并且这个字段的属性为空 才执行this.setInsertFieldValByName(updateByFiled, value222, metaObject);}boolean hasField = this.hasField(metaObject, "update1234");//falseboolean hasField1 = this.hasField(metaObject, "updateBy");// true}/*** <p>@Description: 摘抄自   MetaObjectHandler.setFieldValByName() 方法</p >* <p>@param [metaObject, fieldName]</p >* <p>@return boolean</p >* <p>@throws </p >* <p>@date 2024/6/21 13:29</p >*/private boolean hasField(MetaObject metaObject, String fieldName) {if (metaObject.hasSetter(fieldName) && metaObject.hasGetter(fieldName)) {
//            metaObject.setValue(fieldName, fieldVal);return true;} else if (metaObject.hasGetter(Constants.ENTITY)) {Object et = metaObject.getValue(Constants.ENTITY);if (et != null) {MetaObject etMeta = SystemMetaObject.forObject(et);if (etMeta.hasSetter(fieldName)) {return true;}}}return false;}}

此时发现 updateFill()方法中的metaObject.hasGetter(“updateBy”)返回的结果竟然是false
在这里插入图片描述

此处发现metaObject.hasGetter(“”)这个字段不靠谱,而metaObject.hasSetter()这个更不靠谱,有时候(字段不存在的情况下)直接返回true。此处决定手写判断是否存在该字段如下

2.手写判断方法,可能是mp的版本问题

/*** <p>@Description: 摘抄自   MetaObjectHandler.setFieldValByName() 方法</p >* <p>@param [metaObject, fieldName]</p >* <p>@return boolean</p >* <p>@throws </p >* <p>@date 2024/6/21 13:29</p >*/private boolean hasField(MetaObject metaObject, String fieldName) {if (metaObject.hasSetter(fieldName) && metaObject.hasGetter(fieldName)) {
//            metaObject.setValue(fieldName, fieldVal);return true;} else if (metaObject.hasGetter(Constants.ENTITY)) {Object et = metaObject.getValue(Constants.ENTITY);if (et != null) {MetaObject etMeta = SystemMetaObject.forObject(et);if (etMeta.hasSetter(fieldName)) {return true;}}}return false;}

这篇关于mybatisplus字段注入MetaObjectHandler扫描不到我的指定填充字段的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1081728

相关文章

Python如何调用指定路径的模块

《Python如何调用指定路径的模块》要在Python中调用指定路径的模块,可以使用sys.path.append,importlib.util.spec_from_file_location和exe... 目录一、sys.path.append() 方法1. 方法简介2. 使用示例3. 注意事项二、imp

Pandas利用主表更新子表指定列小技巧

《Pandas利用主表更新子表指定列小技巧》本文主要介绍了Pandas利用主表更新子表指定列小技巧,通过创建主表和子表的DataFrame对象,并使用映射字典进行数据关联和更新,实现了从主表到子表的同... 目录一、前言二、基本案例1. 创建主表数据2. 创建映射字典3. 创建子表数据4. 更新子表的 zb

电脑找不到mfc90u.dll文件怎么办? 系统报错mfc90u.dll丢失修复的5种方案

《电脑找不到mfc90u.dll文件怎么办?系统报错mfc90u.dll丢失修复的5种方案》在我们日常使用电脑的过程中,可能会遇到一些软件或系统错误,其中之一就是mfc90u.dll丢失,那么,mf... 在大部分情况下出现我们运行或安装软件,游戏出现提示丢失某些DLL文件或OCX文件的原因可能是原始安装包

SpringBoot整合mybatisPlus实现批量插入并获取ID详解

《SpringBoot整合mybatisPlus实现批量插入并获取ID详解》这篇文章主要为大家详细介绍了SpringBoot如何整合mybatisPlus实现批量插入并获取ID,文中的示例代码讲解详细... 目录【1】saveBATch(一万条数据总耗时:2478ms)【2】集合方式foreach(一万条数

pandas中位数填充空值的实现示例

《pandas中位数填充空值的实现示例》中位数填充是一种简单而有效的方法,用于填充数据集中缺失的值,本文就来介绍一下pandas中位数填充空值的实现,具有一定的参考价值,感兴趣的可以了解一下... 目录什么是中位数填充?为什么选择中位数填充?示例数据结果分析完整代码总结在数据分析和机器学习过程中,处理缺失数

使用Pandas进行均值填充的实现

《使用Pandas进行均值填充的实现》缺失数据(NaN值)是一个常见的问题,我们可以通过多种方法来处理缺失数据,其中一种常用的方法是均值填充,本文主要介绍了使用Pandas进行均值填充的实现,感兴趣的... 目录什么是均值填充?为什么选择均值填充?均值填充的步骤实际代码示例总结在数据分析和处理过程中,缺失数

解决Maven项目idea找不到本地仓库jar包问题以及使用mvn install:install-file

《解决Maven项目idea找不到本地仓库jar包问题以及使用mvninstall:install-file》:本文主要介绍解决Maven项目idea找不到本地仓库jar包问题以及使用mvnin... 目录Maven项目idea找不到本地仓库jar包以及使用mvn install:install-file基

SQL server配置管理器找不到如何打开它

《SQLserver配置管理器找不到如何打开它》最近遇到了SQLserver配置管理器打不开的问题,尝试在开始菜单栏搜SQLServerManager无果,于是将自己找到的方法总结分享给大家,对SQ... 目录方法一:桌面图标进入方法二:运行窗口进入方法三:查找文件路径方法四:检查 SQL Server 安

MySQL中动态生成SQL语句去掉所有字段的空格的操作方法

《MySQL中动态生成SQL语句去掉所有字段的空格的操作方法》在数据库管理过程中,我们常常会遇到需要对表中字段进行清洗和整理的情况,本文将详细介绍如何在MySQL中动态生成SQL语句来去掉所有字段的空... 目录在mysql中动态生成SQL语句去掉所有字段的空格准备工作原理分析动态生成SQL语句在MySQL

Mysql表如何按照日期字段的年月分区

《Mysql表如何按照日期字段的年月分区》:本文主要介绍Mysql表如何按照日期字段的年月分区的实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、创键表时直接设置分区二、已有表分区1、分区的前置条件2、分区操作三、验证四、注意总结一、创键表时直接设置分区