项目场景:
项目中需要一个动态配置校验数据库表里面每个字段的需求
问题描述:
我在配置的时候拿到的是数据库的表名以及跟表名对应的列名 比如我要校验 t_doctor 里面的hospital_id字段是不是为空,我需要在java中进行校验。
原因分析:
配置表里面把数据库的表名以及要校验的字段名配置进去了,那么我在java里面如何根据数据库的表名找到对应的对象名,然后根据字段名,匹配到对象的属性名然后去校验属性值是不是为空
解决方案:
先建立一个实体表
@TableName(value = "t_doctor")
@Data
public class Doctor{
private Long id;
private String phone;
@TableField("hospital_id")
private Integer hospitalId;
}
然后就是根据实体类拿到对应的数据库表名跟字段名
public static void main(String[] args) throws IllegalAccessException {
Doctor doctor =new Doctor();
doctor.setPhone("1511111252");
HashMap<String, Object> fileName = getFileName(doctor);
}
private static HashMap<String,Object> getFileName(Object o) throws IllegalAccessException {
HashMap<String,Object> fileMap=new HashMap<>();
TableName annotation = o.getClass().getAnnotation(TableName.class);
if (annotation!=null){
//获取表名 @TableName(value = "t_doctor")
String tableName = annotation.value();
System.out.println(tableName+"-----------");
}
Field[] declaredFields = o.getClass().getDeclaredFields();
for (Field field : declaredFields) {
field.setAccessible(true);
TableField tableField = field.getAnnotation(TableField.class);
if (tableField!=null){
//获取@TableField("hospital_id") 里面的列名
String colunmName = tableField.value();
System.out.println(colunmName+"=========");
}
System.out.println("实体类的属性名:"+field.getName()+":属性值"+field.get(o));
fileMap.put(field.getName(),field.get(o));
}
return fileMap;
}
输出的结果为
t_doctor-----------
实体类的属性名:id:属性值null
实体类的属性名:phone:属性值1511111252
如果能拿到这些后续再做其他的处理的话就会比较容易了。
我是张同学,记录下工作中出现的问题。
不积跬步,无以至千里;不积小流,无以成江海。