Java中根据名称拿到实体对应属性的值

如何根据名称定位实体类对应的属性

Java中通常我们的实体类都是英文编码格式,只是通过注释的方式给每个英文属性标注上汉字语义,那么问题来,如果前端传一个汉字名称,如何来匹配上实体类对应的英文属性呢?在实际开发过程中是否以此方式拿到对应属性的值呢?

背景

最近项目中需要开发这么一个功能:前端传入一个汉字名称,需要在后端匹配上某个实体类对应的英文属性,以此就可以获取到对应属性的值。

实现方法流程

一、在后台对应的实体类里对每个属性使用@Column注解,以此方法给每个英文属性标注上对应的汉字语义,如下示例实体类:

import lombok.Data;
import javax.persistence.Column;

@Data
public class TestCar {
    //主键唯一id
    private Long Id;
	
    @Column(name="指导价格(万元)")
    private String guidePrice;
	
    // 车身尺寸
    @Column(name="车身尺寸")
    private String carSize;
	
    // 轴距
    @Column(name="轴距")
    private String carWheelbase;
	
    // 最大马力(Ps)
    @Column(name="最大马力")
    private String maxHorsepower;
	
    // 油耗(L/100km)
    @Column(name="油耗(L/100km)")
    private String fuelConsumption;
}

二、编写功能测试类

1.代码详情

import java.lang.reflect.Field;
import lombok.extern.slf4j.Slf4j;
import javax.persistence.Column;
import org.apache.commons.lang3.reflect.FieldUtils;

@Slf4j
public class TestController {
	public static void main(String[] args) throws IllegalAccessException {
        //前端传入的以空格隔开的汉字名称
        String str = "指导";
		//String str = "马力";
        TestCar testCar = new TestCar();
        //设置最大马力
        testCar.setMaxHorsepower("179");
        //设置指导价格
        testCar.setGuidePrice("76");
        String columnValue1 = null;
        Field[] fields = FieldUtils.getAllFields(TestCar.class);
        //遍历BuickCarsModels实体类属性,与传入的汉字名称str进行匹配
        for(Field f : fields) {
            Column columnAnnotation = f.getAnnotation(Column.class);
            //使用indexOf()进行匹配,没匹配上即为-1;否则不为-1
            if(columnAnnotation != null && columnAnnotation.name().indexOf(str) != -1) {
                f.setAccessible(true);
                //获取匹配上属性对应的值
                columnValue1 = (String) f.get(testCar);
                log.info("匹配上的汉字名称:{} 匹配上的英文属性:{} 获取对应属性值:{}",
                        columnAnnotation.name(), f.getName(), columnValue1);
            }
        }
    }
}

2.效果图

前端传:“指导”字样
传指导汉字效果图
前端传:“马力”字样
传马力汉字效果图

@Column注解介绍

1.用来标识实体类中属性与数据表中字段的对应关系。
2.Column可以标注在属性前或getter方法前。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值