MyBatis 映射器使用反射插入注解
MyBatis mapper to insert annotation with reflection
我有以下带有插入方法的 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
生成样板代码;具有两个静态方法的实用程序 class。
@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();
}
}
在这里,我利用反射从返回样板映射器的特定 class 中检索所有属性。但是我收到错误消息 "attribute must be Constant"。我真的不想自己写那些属性。我该如何解决?
Java 注释属性必须是常量。看一下 @InsertProvider
注释。如果你在你的SQLUtilsclass中写了一个生成整个INSERT语句的方法,你可以使用@InsertProvider
直接调用该方法。
我有以下带有插入方法的 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
生成样板代码;具有两个静态方法的实用程序 class。
@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();
}
}
在这里,我利用反射从返回样板映射器的特定 class 中检索所有属性。但是我收到错误消息 "attribute must be Constant"。我真的不想自己写那些属性。我该如何解决?
Java 注释属性必须是常量。看一下 @InsertProvider
注释。如果你在你的SQLUtilsclass中写了一个生成整个INSERT语句的方法,你可以使用@InsertProvider
直接调用该方法。