属性拷贝忽略某些字段

发布时间 2023-12-22 08:51:18作者: sensen~||^_^|||&

  在更新数据时,如果使用的是UUID随机生成id,在属性拷贝后id就会和数据库中的该条数据的id不一致,导致更新失败并且新增一条除了id字段其他字段都相同的一条数据,这时就可以使用忽略某些字段的方法进行属性拷贝,比如在拷贝时忽略id,这样就只是将除了id之外的其他所有字段进行拷贝从而进行正常更新。

方法如下:

public class StringUtils extends org.springframework.util.StringUtils {

      public static void copyPropertiesIgnoreNull(Object src, Object target, String... ignoreColumn) {
            BeanUtils.copyProperties(src, target, getNullPropertyNames(src, ignoreColumn));
      }

}

 

 

public static String[] getNullPropertyNames(Object source, String... ignoreColumn) {

final BeanWrapper src = new BeanWrapperImpl(source);

java.beans.PropertyDescriptor[] pds = src.getPropertyDescriptors();

Set<String> emptyNames = new HashSet<>();
for (java.beans.PropertyDescriptor pd : pds) {

String columnName = pd.getName();

// 是否为忽略字段
if (Arrays.asList(ignoreColumn).contains(columnName)) {
emptyNames.add(columnName);
continue;
}

Object srcValue = src.getPropertyValue(columnName);
//是否为null
if (srcValue == null) {
emptyNames.add(columnName);
}
}

return emptyNames.toArray(new String[0]);
}