需求,动态更新表中不同的数据库字段
我有这样一个接口:
void updateColumn(Long id, Func1<Person, ?> column, Object val);
实体类:
@Data
class Person{
private Long id;
private String name;
private String gender;
private Integer age;
}
被调用的方式:
public static void main(String[] args) {
updateColumn(1L,Person::getAge,18);
}
实现(这里使用到了hutool工具LambdaUtil):
public Boolean updateColumn(Long id, Func1<Person, ?> column, Object val) {
Class<Person> personClass = Person.class;
// 反射创建对象
Person person = null;
try {
person = personClass.getDeclaredConstructor().newInstance();
} catch (InstantiationException | IllegalAccessException | InvocationTargetException | NoSuchMethodException e) {
e.printStackTrace();
}
// 获取Field
Field field = null;
try {
// 通过column获取真正的字段名
field = personClass.getDeclaredField(LambdaUtil.getFieldName(column));
} catch (NoSuchFieldException e) {
e.printStackTrace();
}
// 设置字段的可访问性,以便设置私有字段
field.setAccessible(true);
// 将val转换为column的类型
final Class<?> type = field.getType();
final Object value = type.cast(val);
// 将val的值赋给Person对象的column字段
try {
field.set(person, value);
} catch (IllegalAccessException e) {
e.printStackTrace();
}
// todo 这个person对象就是需要更新的对象
return false;
}