java中将一个实体类复制到另一个实体类的三种方法

这两天系统支持分配用户权限时看人员数据不太明了,需新增字段岗位及所属网点,开发中遇到一个问题,有一张用户表(UserVO)中,之前查询接口是框架封装的,原有的实体类(UserVO)中没有岗位及所属网点,此时就需要建一个新的实体类(UserInfoEntity),就用到了实体类的复制,以下我将列出三种尝试的方法。

方式一:通过转换为JSONObject

UserInfoEntity userInfoEntity = new UserInfoEntity();
userInfoEntity.setId(1L);

JSONObject userInfoEntity1 = JSONObject.parseObject(JSONObject.toJSONString(userInfoEntity));
UserVO userInfo = JSONObject.toJavaObject(userInfoEntity1, UserVO.class);

此时userInfoEntity1 中有数据,新建一个userVO1 ,想将userInfoEntity1 中重复的字段存入userVO1 。但这个方法不会生效,因为这里new的对象是个空对象,它在转为JSONObject 时变为了空,for循环赋值那一步并没有赋值成功,大家根据实际情况改造一下就好了。

方式二:通过Map方式赋值

UserInfoEntity userInfoEntity = new UserInfoEntity();
userInfoEntity.setId(1L);
UserVO userVO = new UserVO();
BeanMap beanMap = BeanMap.create(userInfoEntity);
BeanMap beanMap1 = BeanMap.create(userVO);
Map<String,Object> map = new HashMap<>();
for (Object key:beanMap.keySet()){
    String key1 = (String) key;
    if (beanMap1.containsKey(key)){
        map.put(key1,beanMap1.get(key));
    }
}
JSONObject jsonObject1 = new JSONObject();
jsonObject1.putAll(map);
UserInfoEntity userInfo = jsonObject1.toJavaObject(UserInfoEntity.class);

这个BeanMaporg.springframework.cglib.beans包下的类,用于将实例转为map形式。用这种方法是要注意,这个BeanMap中自带的put方法是不起作用的,具体原因有兴趣可以自行查阅,找到了可以让我也看看,new HashMap<>()的目的就是为了解决这个问题。

方式三:BeanUtils.copyProperties( @NotNull Object source,@NotNull Object target) 不推荐使用!!!

该方法是spring项目BeanUtils工具自带的方法。第一个参数是你的源数据,第二个参数是你要复制的目标对象,然后就复制成功了。但个人经过一些学习后不建议使用,该方法存在的弊端很多,内部实例复制时,过程不清晰,对其他的开发人员不友好。目前主流的不同实体类复制值的方式就是建议别偷懒,就直接用最朴素的get、set方式赋值就好了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值