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

相关文章

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

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

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

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

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

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

Python获取C++中返回的char*字段的两种思路

《Python获取C++中返回的char*字段的两种思路》有时候需要获取C++函数中返回来的不定长的char*字符串,本文小编为大家找到了两种解决问题的思路,感兴趣的小伙伴可以跟随小编一起学习一下... 有时候需要获取C++函数中返回来的不定长的char*字符串,目前我找到两种解决问题的思路,具体实现如下:

找不到Anaconda prompt终端的原因分析及解决方案

《找不到Anacondaprompt终端的原因分析及解决方案》因为anaconda还没有初始化,在安装anaconda的过程中,有一行是否要添加anaconda到菜单目录中,由于没有勾选,导致没有菜... 目录问题原因问http://www.chinasem.cn题解决安装了 Anaconda 却找不到 An

MySQL新增字段后Java实体未更新的潜在问题与解决方案

《MySQL新增字段后Java实体未更新的潜在问题与解决方案》在Java+MySQL的开发中,我们通常使用ORM框架来映射数据库表与Java对象,但有时候,数据库表结构变更(如新增字段)后,开发人员可... 目录引言1. 问题背景:数据库与 Java 实体不同步1.1 常见场景1.2 示例代码2. 不同操作

使用Python实现获取网页指定内容

《使用Python实现获取网页指定内容》在当今互联网时代,网页数据抓取是一项非常重要的技能,本文将带你从零开始学习如何使用Python获取网页中的指定内容,希望对大家有所帮助... 目录引言1. 网页抓取的基本概念2. python中的网页抓取库3. 安装必要的库4. 发送HTTP请求并获取网页内容5. 解

电脑提示找不到openal32.dll文件怎么办? openal32.dll丢失完美修复方法

《电脑提示找不到openal32.dll文件怎么办?openal32.dll丢失完美修复方法》openal32.dll是一种重要的系统文件,当它丢失时,会给我们的电脑带来很大的困扰,很多人都曾经遇到... 在使用电脑过程中,我们常常会遇到一些.dll文件丢失的问题,而openal32.dll的丢失是其中比较

SpringBoot项目启动报错"找不到或无法加载主类"的解决方法

《SpringBoot项目启动报错找不到或无法加载主类的解决方法》在使用IntelliJIDEA开发基于SpringBoot框架的Java程序时,可能会出现找不到或无法加载主类com.example.... 目录一、问题描述二、排查过程三、解决方案一、问题描述在使用 IntelliJ IDEA 开发基于

SpringBoot整合MybatisPlus的基本应用指南

《SpringBoot整合MybatisPlus的基本应用指南》MyBatis-Plus,简称MP,是一个MyBatis的增强工具,在MyBatis的基础上只做增强不做改变,下面小编就来和大家介绍一下... 目录一、MyBATisPlus简介二、SpringBoot整合MybatisPlus1、创建数据库和