java中根据字段名称(数据库字段名称)获取当前对象对应字段的值

java实体类中多个字段要判断条件是否成立,需要一个一个写,可以通过数据库将对应字段存储,然后通过循环的方式去判断,减少代码冗余

  public void AssaysAlO(){
        List<AssaysAlarm> list = Lists.newArrayList();
        List<AssaysAlo> assaysAlos = assaysAloMapper.selectAssaysAloList();
        List<AssaysAlarmRule> assaysAlarmRules = assaysAlarmRuleMapper.selectList(new QueryWrapper<AssaysAlarmRule>()
            .eq("table_name", "assays_alo"));
        if (CollUtil.isNotEmpty(assaysAlos)){
            assaysAlos.forEach(assaysAloVo -> {
                    for (AssaysAlarmRule assaysAlarmRule:assaysAlarmRules){
                        String name =assaysAlarmRule.getFieldName();
                        try {
                            Field declaredField = assaysAloVo.getClass().getDeclaredField(name);
                            declaredField.setAccessible(true);//这里必须设置为true,否则会报私有方法错下面取值
                            BigDecimal val1 = new BigDecimal( declaredField.get(assaysAloVo).toString());//获取对应的值
                            if ((CommonUtils.isNotNull(assaysAlarmRule.getVMax())
                                && NumberUtil.isGreater(val1,BigDecimal.valueOf(assaysAlarmRule.getVMax())))
                                ||(CommonUtils.isNotNull(assaysAlarmRule.getVMin())
                                &&NumberUtil.isLess(val1,BigDecimal.valueOf(assaysAlarmRule.getVMin())))){
                                AssaysAlarm assaysAlarm = new AssaysAlarm();
                                assaysAlarm.setAlarmTitle(assaysAlarmRule.getAlarmTitle());
                                list.add(assaysAlarm);
                            }
                        } catch (Exception e) {
                            throw new RuntimeException(e);
                        }
                    }
                });
                baseMapper.insertBatch(list);
        }
    }
  • 这只是一部分代码,不能直接运行
您可以使用 Java 的反射机制来实现将对象字段名与数据库字段关联的功能。可以通过在实体类的字段上添加注解来指定数据库对应字段名,例如: ```java public class User { @Column(name = "user_id") private Long userId; @Column(name = "user_name") private String userName; // ... } ``` 在上述代码,我们使用 `@Column` 注解来指定实体类的 `userId` 字段对应数据库的 `user_id` 列,`userName` 字段对应数据库的 `user_name` 列。 然后,在进行数据库操作时,可以使用反射机制来获取实体类字段名,并将其和注解指定的数据库字段名进行关联。例如: ```java public void save(User user) throws Exception { // 获取实体类的 Class 对象 Class<?> clazz = user.getClass(); // 获取实体类的所有字段 Field[] fields = clazz.getDeclaredFields(); // 构建 SQL 语句 StringBuilder sqlBuilder = new StringBuilder("INSERT INTO user ("); for (Field field : fields) { // 判断字段上是否有 @Column 注解 if (field.isAnnotationPresent(Column.class)) { // 获取 @Column 注解实例 Column column = field.getAnnotation(Column.class); // 获取注解指定的数据库字段名 String columnName = column.name(); // 将实体类字段名和注解指定的数据库字段名进行关联 sqlBuilder.append(columnName).append(", "); } } // 去掉最后一个逗号和空格 sqlBuilder.delete(sqlBuilder.length() - 2, sqlBuilder.length()); sqlBuilder.append(") VALUES ("); // 省略构建 SQL 语句的过程 // 执行 SQL 语句 // ... } ``` 在上述代码,我们首先使用 `clazz.getDeclaredFields` 方法获取实体类的所有字段,然后通过 `field.isAnnotationPresent` 方法来判断字段上是否有 `@Column` 注解。如果有,则使用 `field.getAnnotation` 方法获取注解实例,并通过 `column.name()` 方法获取注解指定的数据库字段名,最后将实体类字段名和数据库字段名进行关联。 希望这个示例代码可以帮助您实现将对象字段名与数据库字段关联的功能。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值