我有下面带有插入方法的 MyBatis Mapper:
String INSERT =SQLUtil.getFields(Consumer.class);
String INSERT_WITH_BRACE = SQLUtil.GetFieldsWithBrace(Consumer.class);
@Insert("INSERT INTO Consumer("+ INSERT +") " +
" VALUES " + INSERT_WITH_BRACE)
public int insert(Consumer consumer);
这个想法是使用SQLUtil
生成样板代码;一个具有两个静态方法的实用程序类。
@Component
public class SQLUtil {
private static StringBuilder stringBuilder;
public static String getFields(Class clazz) {
stringBuilder = new StringBuilder();
Field[] declaredFields = clazz.getDeclaredFields();
int pos = 0;
for(Field field: declaredFields){
stringBuilder.append(field.getName());
if(pos++ < declaredFields.length-1)
stringBuilder.append(",");
}
return stringBuilder.toString();
}
public static String GetFieldsWithBrace(Class clazz) {
int i=0;
stringBuilder = new StringBuilder();
Field[] declaredFields = clazz.getDeclaredFields();
for(Field field: declaredFields){
stringBuilder.append("#{");
stringBuilder.append(field.getName());
stringBuilder.append("}");
if(i++ < declaredFields.length-1)
stringBuilder.append(",");
}
return stringBuilder.toString();
}
}
在这里,我利用反射从返回样板映射器的特定类中检索所有属性。但我收到错误消息“属性必须是常量”。我真的不想自己写这些属性。我该如何解决这个问题?
最佳答案
Java 注释属性必须是常量。看一下 @InsertProvider
注释。如果您在 SQLUtils 类中编写了生成整个 INSERT 语句的方法,则可以使用 @InsertProvider
直接调用该方法。
关于java - MyBatis 映射器通过反射插入注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62232178/