根据字符串,获取实体属性上的annotation,如:createTime” 找到对应实体属性中的 TableField(value = "create_time", fill = FieldFill.INSERT)
根据字符串,获取实体属性上的annotation,如:createTime” 找到对应实体属性中的 TableField(value = "create_time", fill = FieldFill.INSERT)
- Field[] fields = clazz.getFields(); //仅能获取类(及其父类) public属性成员
- Field[] declaredFields = clazz.getDeclaredFields(); //仅能获取类本身的属性成员(包括私有、共有、保护)
- Field[] superDeclaredFields = clazz.getSuperclass().getDeclaredFields(); //因此在获取父类的私有属性时,要通过getSuperclass的之后再通过getDeclaredFiled获取。
BaseEntity.java
public class BaseEntity implements Serializable {
/**
* 创建时间
*/
@Schema(description = "创建时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@TableField(value = "create_time", fill = FieldFill.INSERT)
private Date createTime;
public Date getCreateTime() {
return createTime;
}
public void setCreateTime(Date createTime) {
this.createTime = createTime;
}
}
SysRole.java
/**
* 角色
*/
@Schema(description = "角色信息")
@TableName("sys_role")
public class SysRole extends BaseEntity {
private static final long serialVersionUID = 1L;
/**
* 主健ID
*/
@Schema(description = "主健ID")
@TableId(value = "id", type = IdType.ASSIGN_UUID)
private String id;
/**
* 角色标识
*/
@Schema(description = "角色标识")
@TableField(value = "code")
private String code;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getCode() {
return code;
}
public void setCode(String code) {
this.code = code;
}
}
MybatisPlusTest
import com.baomidou.mybatisplus.annotation.TableField;
import com.cuwor.base.entity.SysRole;
import io.swagger.v3.oas.annotations.media.Schema;
import org.junit.jupiter.api.Test;
import java.lang.annotation.Annotation;
import java.lang.reflect.Field;
public class MybatisPlusTest {
@Test
void queryWrapperTest() {
String propertyName = "createTime";
String columnName = getAnnotationValue(SysRole.class, propertyName, TableField.class);
System.out.println("Database column name for '" + propertyName + "' is: " + columnName);
String condition = getAnnotationValue(SysRole.class, propertyName, Schema.class, "description");
System.out.println("@Schema description is: " + condition);
}
/**
* 根据字符串,找到对应属性,获取Annotation的值
*
* @param clazz 被查找对象
* @param propertyName 被查找属性
* @param annotationClass 注释类
* @param methodNames 注释类的方法
* @param <T>
* @return
*/
public static <T extends Annotation> String getAnnotationValue(Class<?> clazz, String propertyName, Class<T> annotationClass, String... methodNames) {
try {
// 首先检查当前类中的字段 -- 仅能获取类本身的属性成员(包括私有、共有、保护)
Field[] declaredFields = clazz.getDeclaredFields();
for (Field field : declaredFields) {
if (field.getName().equals(propertyName)) {
T annotation = field.getAnnotation(annotationClass);
if (annotation != null) {
// 这里假设注解有一个名为 "value" 的方法返回 String 类型
// 你需要根据实际的注解定义来调整
java.lang.reflect.Method valueMethod = annotationClass.getMethod(methodNames.length > 0 ? methodNames[0] : "value");
return (String) valueMethod.invoke(annotation);
}
}
}
// 如果没有在当前类中找到,就检查父类 -- 在获取父类的私有属性时,要通过getSuperclass的之后再通过getDeclaredFiled获取。
Class<?> superclass = clazz.getSuperclass();
while (superclass != null) {
Field[] superDeclaredFields = superclass.getDeclaredFields();
for (Field field : superDeclaredFields) {
if (field.getName().equals(propertyName)) {
T annotation = field.getAnnotation(annotationClass);
if (annotation != null) {
java.lang.reflect.Method valueMethod = annotationClass.getMethod(methodNames.length > 0 ? methodNames[0] : "value");
return (String) valueMethod.invoke(annotation);
}
}
}
superclass = superclass.getSuperclass(); // 递归搜索父类
}
} catch (Exception e) {
e.printStackTrace();
}
return null; // 如果没有找到对应的注解或属性,返回null
}
}

根据字符串,获取实体属性上的annotation,如:createTime” 找到对应实体属性中的 TableField(value = "create_time", fill = FieldFill.INSERT)的更多相关文章
- C#、Python中分别是怎么实现通过字符串获取实体类的值以及给实体类赋值
一.引入 最近遇到一个项目里面的功能,在给实体类赋值的时候,由于赋值字段是动态生成的,所以如果用常用的方法(直接实体类的名称.字段名=要赋的值),将会生成很多无用的代码,所以找到了一个通过反射的赋值与 ...
- objectARX 获取指定图层上所有实体ID
2015-12-17 //获取指定图层上所有实体ID AcDbObjectIdArray GetAllEntityId(const TCHAR* layername) { AcDbObjectIdAr ...
- python_反射——根据字符串获取模块中的属性
1.获取当前模块中的属性 class Person(object): def __init__(self,name,age): self.name = name self.age = age p = ...
- C#通过属性名字符串获取、设置对象属性值
之前理工项目从这个博客找到了相对应的方法:C#通过属性名字符串获取.设置对象属性值 https://www.cnblogs.com/willingtolove/p/12198871.html
- JS对象 JavaScript 中的所有事物都是对象,如:字符串、数值、数组、函数等,每个对象带有属性和方法。
什么是对象 JavaScript 中的所有事物都是对象,如:字符串.数值.数组.函数等,每个对象带有属性和方法. 对象的属性:反映该对象某些特定的性质的,如:字符串的长度.图像的长宽等: 对象的方法: ...
- 外部配置属性值是如何被绑定到XxxProperties类属性上的?--SpringBoot源码(五)
注:该源码分析对应SpringBoot版本为2.1.0.RELEASE 1 前言 本篇接 SpringBoot是如何实现自动配置的?--SpringBoot源码(四) 温故而知新,我们来简单回顾一下上 ...
- JavaScript中.、[]与setAttribute()在设置属性上的区别
.和[] javaScript.和[]既可以对所有js对象设置属性,但是对于DOM对象它设置的属性有些特殊.对于元素DOM标准属性,实现属性值的设置/更改;对于元素DOM非标准属性,仅在js中有效,在 ...
- struts 多文件上传 annotation注解(零配置)+ ajaxfileupload + 异步 版本
[本文简介] struts 多文件上传.基于”零配置“+"ajaxfileupload" 的一个简单例子. [导入依赖jar包] jquery-1.7.2.js : http:// ...
- 爬虫实战【5】送福利!Python获取妹子图上的内容
[插入图片,妹子图首页] 哈,只敢放到这个地步了. 今天给直男们送点福利,通过今天的代码,可以把你的硬盘装的满满的~ 下面就开始咯! 第一步:如何获取一张图片 假如我们知道某张图片的url,如何获取到 ...
- python获取内存地址上存储的值
在python中,可以通过id()这个方法来获取对象的内存地址. 但是反过来,怎么获取内存地址上存储的值? 先看一段代码: from ctypes import string_at from sys ...
随机推荐
- ELT已死,EtLT才是现代数据处理架构的终点!
提到数据处理,经常有人把它简称为"ETL".但仔细说来,数据处理经历了ETL.ELT.XX ETL(例如,Reverse ETL.Zero-ETL)到现在流行的EtLT架构几次更迭 ...
- 零基础学习人工智能—Python—Pytorch学习(三)
前言 这篇文章主要两个内容. 一,把上一篇关于requires_grad的内容补充一下. 二,介绍一下线性回归. 关闭张量计算 关闭张量计算.这个相对简单,阅读下面代码即可. print(" ...
- android java.lang.Exception: java.net.ProtocolException: Expected HTTP 101 response
Android stomp长连接连接异常: 报错:java.lang.Exception: java.net.ProtocolException: Expected HTTP 101 response ...
- Spring框架之IOC介绍
Spring之IOC 简介 首先,官网中有这样一句话:Spring Framework implementation of the Inversion of Control (IoC) princip ...
- ICMAN触摸滑条滚轮方案
ICMAN触摸滑条滚轮调光是一种利用触摸技术实现的调光控制方式,是一种更简单.直观且节能的调光方式,有效改善了用户的照明体验,并在智能家居和节能照明领域发挥着重要作用. 基于厦门晶尊微电子(ICMAN ...
- python学习教材选哪个
python语言俨然成为当今最流行的国际语言,无论你是做AI的还是非AI,大家都在用python语言,各种平台也都开始支持python,现在连文科生都在学习python语言了,甚至很多表哥表姐的工作都 ...
- 使用VSCode搭建UniApp + TS + Vue3 + Vite项目
uniapp是一个使用Vue.js开发所有前端应用的框架,开发者编写一套代码,可发布到iOS.Android.以及各种小程序.深受广大前端开发者的喜爱.uniapp官方也提供了自己的IDE工具HBui ...
- VS2022 17.12.0 Preview2版本对Copilot的功能增强
前提条件,使用最新版的17.12.0 Preview2,并且有有效的Copilot AI订阅,那么可以体验这个新鲜好用的功能 增强了Copilot AI对IEnumerable Visualizer的 ...
- 【JS设计模式笔记】-观察者模式(即发布-订阅模式)(结构型)
发布-订阅模式的作用 比如常见的发送短信就是一个典型的发布-订阅模式,例如,小明.小红去售楼处购买房子,但是售楼处的工作人员告诉小明.小红当前楼盘已经售罄,新楼盘还没有开售,这个时候,小明.小红把自己 ...
- 深度学习模型训练的过程理解(训练集、验证集、测试集、batch、iteration、epoch、单步预测、多步预测、kernels、学习率)
呜呜呜呜,感谢大佬学弟给我讲干货. 本来是讨论项目的,后面就跑偏讲论文模型了. 解答了我一直以来的疑问: 数据放模型里训练的过程. 假设我们有一个数据集26304条数据,假设设置模型读入1000条,如 ...