栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

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

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1007810.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号