java 通过数据库的表名匹配到实体类对象以及字段名跟属性值的匹配

项目需求是动态配置校验数据库表字段,例如校验t_doctor表的hospital_id字段是否为空。问题在于如何在Java中根据数据库表名找到对应实体类并匹配字段属性进行校验。解决方案是创建实体类,通过实体类获取数据库表名和字段名,便于后续处理。这是张同学在工作中遇到并记录的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

项目场景:

项目中需要一个动态配置校验数据库表里面每个字段的需求


问题描述:

我在配置的时候拿到的是数据库的表名以及跟表名对应的列名 比如我要校验 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

如果能拿到这些后续再做其他的处理的话就会比较容易了。


我是张同学,记录下工作中出现的问题。
不积跬步,无以至千里;不积小流,无以成江海。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值