/**
* 根据传入的实体类class得到可以用在select后的表头字段,在修改实体类的属性后不用重新修改
*
* @param clazz
* @param excludeList 除外集合,可以为空即不需要除外
* @param <T>
* @return
*/
public static <T> String getTitleByEntity(Class<T> clazz, List<String> excludeList) {
StringBuilder builder = new StringBuilder();
//注意getDeclaredFields()获取的数组官方API说明不保证顺序。所以避免两次请求结果不一样
Field[] declaredFields = clazz.getDeclaredFields();
for (Field field : declaredFields) {
Column annotation = field.getAnnotation(Column.class);
String name = null;
if (annotation != null) {
name = annotation.name();
}
if (!ObjectUtils.isEmpty(name)) {
//如果有Column注解,就取注解的name值
if (builder.length() == 0) {
builder.append(name);
} else {
builder.append(",");
builder.append(name);
}
} else {
//如果没有注解直接取属性名的全小写
String fieldName = field.getName().toLowerCase();
if (!CollectionUtils.isEmpty(excludeList)) {
List<String> collect = excludeList.stream().map(String::toLowerCase).collect(Collectors.toList());
if (collect.contains(fieldName)) continue;
}
if (builder.length() == 0) {
builder.append(fieldName);
} else {
builder.append(",");
builder.append(fieldName);
}
}
}
return builder.toString();
}
修改实体类后只用改实体类自动获取修改后的字段。