JavaBean复制工具——BeanCopier

36500365体育在线投注 2025-08-10 21:05:28 admin 阅读 7195

1.BeanCopier在cglib包下,Spring核心包中有包含

2.使用

a.对象转对象

//对象转对象

public static void bean2bean(Object bean1, Object bean2){

BeanCopier beanCopier = BeanCopier.create(bean1.getClass(), bean2.getClass(), false);

beanCopier.copy(bean1, bean2, null);

}

b.对象转Map

//对象转Map

public static void bean2Map(Object bean1, Map map){

Map beanMap = BeanMap.create(bean1);

map.putAll(beanMap);

}

c.Map转对象

//Map转对象

public static void map2Bean(Map map ,Object bean1){

Map beanMap = BeanMap.create(bean1);

beanMap.putAll(map);

}

3.测试

a.创建两个测试VO

public class Test1VO {

private int id;

private String name;

private Map attrs;

public int getId() {

return id;

}

public void setId(int id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public Map getAttrs() {

return attrs;

}

public void setAttrs(Map attrs) {

this.attrs = attrs;

}

@Override

public String toString() {

return "Test1VO{" +

"id=" + id +

", name='" + name + '\'' +

", attrs=" + attrs +

'}';

}

}

public class Test2VO {

private int id;

private String name;

private Map attrs;

public int getId() {

return id;

}

public void setId(int id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public Map getAttrs() {

return attrs;

}

public void setAttrs(Map attrs) {

this.attrs = attrs;

}

@Override

public String toString() {

return "Test2VO{" +

"id=" + id +

", name='" + name + '\'' +

", attrs=" + attrs +

'}';

}

}

b.测试

public static void main(String[] args) {

//对象转对象

// Test1VO test1 = getTest1();

// Test2VO test2 = new Test2VO();

// bean2bean(test1, test2);

// System.out.println(test2);

//对象转Map

// Test1VO test1 = getTest1();

// Map map = new HashMap<>();

// bean2Map(test1, map);

// System.out.println(map);

//Map转对象

Map map = getMap();

Test2VO test2 = new Test2VO();

map2Bean(map, test2);

System.out.println(test2);

}

private static Test1VO getTest1(){

Test1VO test1 = new Test1VO();

test1.setId(1);

test1.setName("name");

Map attrs = new HashMap<>();

attrs.put("key1", "value1");

attrs.put("key2", "value2");

test1.setAttrs(attrs);

return test1;

}

private static Map getMap(){

Map map = new HashMap<>();

map.put("name", "This is name");

map.put("id", 55);

Map attrs = new HashMap<>();

attrs.put("key1", "value1");

attrs.put("key2", "value2");

map.put("attrs", attrs);

return map;

}

c.注意:BeanCopier只拷贝名称和类型都相同的属性。

4.转换器

a.创建VO

public class Test3VO {

private int id;

private boolean name;

private List attrs;

public int getId() {

return id;

}

public void setId(int id) {

this.id = id;

}

public boolean isName() {

return name;

}

public void setName(boolean name) {

this.name = name;

}

public List getAttrs() {

return attrs;

}

public void setAttrs(List attrs) {

this.attrs = attrs;

}

@Override

public String toString() {

return "Test3VO{" +

"id=" + id +

", name=" + name +

", attrs=" + attrs +

'}';

}

}

b.创建自定义转换器

public class TestConverter implements Converter {

@Override

public Object convert(Object value, Class target, Object context) {

if("setName".equals(context)){

if(! StringUtils.hasText((String) value)){

return false;

}

return true;

}

if("setAttrs".equals(context)){

Map attrMap = (Map) value;

if(CollectionUtils.isEmpty(attrMap)){

return null;

}

List result = new ArrayList<>();

for(Map.Entry entry : attrMap.entrySet()){

result.add(entry.getKey() + "-" + entry.getValue());

}

return result;

}

return value;

}

}

c.使用

//对象转对象(转换器)

private static void bean2bean(Object bean1, Object bean2, Converter converter){

BeanCopier beanCopier = BeanCopier.create(bean1.getClass(), bean2.getClass(), true);

beanCopier.copy(bean1, bean2, converter);

}

d.测试

//转换器

Test1VO test1 = getTest1();

Test3VO test3 = new Test3VO();

bean2bean(test1, test3, new TestConverter());

System.out.println(test3);

相关文章

王者qq区什么服务器女生多

去新加坡,全靠这6个APP

进口奶粉怎么辨别真假? 能立多为你揭秘

2023玄修攻略之魍魉右玄篇——作者:壹半醒