利用Java反射实现两个具有相同属性bean赋值

private String Age;

private String Address;

private String School;

private String create_date;

private String update_date;

private String DELeted;

}

2、数据库中字段名

package com.guor.entity;

import java.util.Date;

public class User {

private Integer id;

private String username;

private Integer age;

private String address;

private String school;

private Date createDate;

private Date updateDate;

private Integer deleted;

}

3、反射工具类

import java.lang.reflect.Field;

import java.lang.reflect.Method;

import java.util.ArrayList;

import java.util.Date;

import java.util.List;

import java.util.Map;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

@Slf4j

public class ReflectUtil {

/**

  • 不同类型,类似属性名称,两个bean之间的赋值,默认数据源bean类型都为String

*/

public static <T, V> V convertByReflect(T srcObject, Class targetClazz) {

V targetClass = null;

try {

Class<?> srcClazz = Class.forName(srcObject.getClass().getName());

targetClass = targetClazz.newInstance();

// 获取两个实体类的所有属性

Field[] srcFields = srcClazz.getDeclaredFields();

Field[] targetFields = targetClazz.getDeclaredFields();

// 遍历srcFields,获取属性值,然后遍历targetObject查找是否有相同的属性,如有相同则根据类型赋值

for (Field srcField : srcFields) {

Object value = invokeGetMethod(srcObject, srcField.getName());

for (Field targetField : targetFields) {

if (srcField.getName().toLowerCase().equals(targetField.getName().toLowerCase())) {

// 两个类型是否相同

if (srcField.getType().equals(targetField.getType())) {

setFieldValue(targetField, targetClass, value);

} else {

setFieldValueByType(targetField, targetClass, value);

}

}

}

}

} catch (Exception e) {

log.error(“convertByReflect Error {}”, e.getMessage());

return null;

}

return targetClass;

}

public static <V, T> T mapToBean(Map<String, V> map, Class targetClazz) {

T targetClass = null;

try {

targetClass = targetClazz.newInstance();

Field[] targetFields = targetClazz.getDeclaredFields();

for (Map.Entry<String, V> entry : map.entrySet()) {

for (Field targetField : targetFields) {

if (entry.getKey().toLowerCase().equals(targetField.getName().toLowerCase())) {

// 两个类型是否相同

if (entry.getValue().getClass().getTypeName().equals(targetField.getType())) {

setFieldValue(targetField, targetClass, entry.getValue());

} else {

setFieldValueByType(targetField, targetClass, entry.getValue());

}

}

}

}

} catch (Exception e) {

log.error(“mapToBean Error {}”, e.getMessage());

return null;

}

return targetClass;

}

/**

  • 不同类型,类似属性名称,两个List之间的赋值,默认数据源bean类型都为String

*

  • @param srcObjectList 数据源List

  • @param targetClazz   目标类Class

  • @return

*/

public static <T, V> List convertListByReflect(List srcObjectList, Class targetClazz) {

List retList = new ArrayList();

try {

V targetClass = targetClazz.newInstance();

for (T srcObject : srcObjectList) {

targetClass = convertByReflect(srcObject, targetClazz);

if (targetClass == null) {

return new ArrayList();

}

retList.add(targetClass);

}

} catch (Exception e) {

log.error(“convertByReflect Error {}”, e.getMessage());

return new ArrayList();

}

return retList;

}

/**

  • 获取值

*

  • @param clazz     类

  • @param fieldName 类的属性名称

  • @return

*/

private static Object invokeGetMethod(Object clazz, String fieldName) {

String methodName = fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1);

Method method = null;

try {

method = Class.forName(clazz.getClass().getName()).getDeclaredMethod(“get” + methodName);

return method.invoke(clazz);

} catch (Exception e) {

return “”;

}

}

/**

Docker步步实践

目录文档:

①Docker简介

②基本概念

③安装Docker

④使用镜像:

⑤操作容器:

⑥访问仓库:

⑦数据管理:

⑧使用网络:

⑨高级网络配置:

⑩安全:

⑪底层实现:

⑫其他项目:

**

[外链图片转存中…(img-lEX9RgxM-1716223539825)]

⑧使用网络:

[外链图片转存中…(img-DKS0X5MI-1716223539826)]

⑨高级网络配置:

[外链图片转存中…(img-NKV7su0I-1716223539826)]

⑩安全:

[外链图片转存中…(img-Sy0BJOBx-1716223539826)]

⑪底层实现:

[外链图片转存中…(img-p4VqLBBr-1716223539827)]

⑫其他项目:

[外链图片转存中…(img-orOzRYZv-1716223539827)]

  • 15
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值