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);给目标对象赋值

我诚恳地希望能够获得你的原谅。只是你懂得的,对于有一些委屈,

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

相关文章:

你感兴趣的文章:

标签云: