java反射赋值时字段类型的转换

做一个数据同步的功能,定时从源库抽取部门表,同步到目标库的部门表中,因两个表的结构不同,做了一些映射处理,将源库字段映射到目标库字段中,获取到源数据后,创建一个新的目标对象,使用反射给对象赋值,然后添加到数据库中,这个是同步中的一个添加操作,碰上了类型不同,赋值出错的问题,经查得知,有个转换的方法可以使用:org.apache.commons.beanutils.ConvertUtils,代码如下:

private void addDept(Dept dept) {
        SysDepart depart = new SysDepart();
        for (TbField tbField : fieldList) {
            try {
                Field srcBmField = Dept.class.getDeclaredField(tbField.getTbBmField());
                srcBmField.setAccessible(true);
                Object value = srcBmField.get(dept);
                Field dstBmField = SysDepart.class.getDeclaredField(tbField.getXgBmField());
                dstBmField.setAccessible(true);
                Object convert = ConvertUtils.convert(value, dstBmField.getType());
                dstBmField.set(depart,convert);
            } catch (NoSuchFieldException | IllegalAccessException e) {
                e.printStackTrace();
            }
        }
        log.info("{}",depart);
    }

参数Dept是源数据,经过比对后这个记录在目标库中是没有的,因此需要添加。
fieldList是字段映射列表,只用已经映射的字段为目标对象赋值,未映射的就不管了。
Dept.class.getDeclaredField(tbField.getTbBmField());获取到源对象中映射字段,
srcBmField.setAccessible(true);设置字段操作权限,
Object value = srcBmField.get(dept);获取字段值
Field dstBmField = SysDepart.class.getDeclaredField(tbField.getXgBmField());获取目标对象中映射字段
dstBmField.setAccessible(true);设置字段操作权限
Object convert = ConvertUtils.convert(value, dstBmField.getType());将源字段值转换成目标字段类型
dstBmField.set(depart,convert);给目标对象赋值

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值