gpt4 book ai didi

要插入数据库的 Java 注释

转载 作者:行者123 更新时间:2023-12-02 10:20:34 25 4
gpt4 key购买 nike

我有一个以键值格式存储数据的数据库,例如:

|---------------------|------------------|
| Key | Value |
|---------------------|------------------|
| KEY_FOR_NAME | Abhishek |
|---------------------|------------------|

目前,为了将数据存储在此表中,对于每个键,我执行以下操作:

String additionalInfoValue = "Abhishek";
AdditionalInfo additionalInfo = new AdditionalInfo(); //entity object
additionalInfo.setKey("KEY_FOR_NAME");
additionalInfo.setSolutionValue(additionalInfoValue);

该表中有很多键值对,因此会产生很多像上面提到的那样的代码。

我想做的是做一些注释,例如:

@StoreInTable("KEY_FOR_NAME")
String additionalInfoValue = "Abhishek";

这会将我的数据保存在表中,并避免像上面提到的那样的不必要的代码。

我在项目中使用 Spring 和 Hibernate 来进行所有实体和数据库查询 (HQL)。

最佳答案

如果我理解正确的话,这只是一个简单的 Java 反射问题。如下所示:

定义@StoreInTable:

@Target(FIELD)
@Retention(RUNTIME)
public @interface StoreInTable {
String value();
}

编写一个函数,将任何实例的 @StoreInTable 设置打包到 AdditionalInfo 列表中:

public class FooUtil {

public static List<AdditionalInfo> packAdditionalInfo(Object instance) throws Exception {
List<AdditionalInfo> result = new ArrayList<>();
for (Field field : instance.getClass().getDeclaredFields()) {
field.setAccessible(true);
StoreInTable storeInTable = field.getAnnotation(StoreInTable.class);
if (storeInTable != null) {
AdditionalInfo info = new AdditionalInfo();
info.setKey(storeInTable.value());
info.setValue(field.get(instance).toString());
result.add(info);
}
}
return result;
}
}

要使用它,请定义表示键值对的任何类,它可能是:

public class KeyValue {

@StoreInTable("KEY1")
String additionalInfoValue1 = "Abhishek";

@StoreInTable("KEY2")
String additionalInfoValue2 = "Keshri";
}

然后:

List<AdditionalInfo> infoList = FooUtil.packAdditionalInfo(new KeyValue());
for(AdditionalInfo info : infoList){
//save the info one by one , in this case it would save (key=KEY1, value=Abhishek) and (key=KEY2 , value=Keshri)
entityManage.persist(info);
}

关于要插入数据库的 Java 注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54365230/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com