BeanCopier从名字可以看出了,是一个快捷的bean类复制工具类。

如何使用,我就直接丢代码了

public class BeanCopierTest {static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");public static void main(String[] args) {
//        sameCopy();
//        difCopy();
        difCopyConvert();
//        noSetterCopy();
//        lessSetterCopy();
//        lessSetterCopy2();
    }// 属性名称、类型都相同,成功复制public static void sameCopy() {one one = new one();one.setId(1);one.setName("one");final BeanCopier copier = BeanCopier.create(one.class, two.class, false);two two = new two();copier.copy(one, two, null);System.out.println(one.toString());System.out.println(two.toString());}// 属性名称相同,类型不同,类型不同的不能复制public static void difCopy() {one one = new one();one.setId(1);one.setName("one");final BeanCopier copier = BeanCopier.create(one.class, oneDif.class, false);oneDif oneDif = new oneDif();copier.copy(one, oneDif, null);System.out.println(one.toString());System.out.println(oneDif.toString());}// 属性名称相同,类型不同的解决方法,使用convert,注意要写上类型相同的情况public static void difCopyConvert() {one one = new one();one.setId(1);one.setName("one");final BeanCopier copier = BeanCopier.create(one.class, oneDif.class, true);oneDif oneDif = new oneDif();copier.copy(one, oneDif, new Converter() {@Overridepublic Object convert(Object value, Class target, Object context) {if (value instanceof Integer) {return (Integer) value;} else if (value instanceof Timestamp) {Timestamp date = (Timestamp) value;return sdf.format(date);} else if (value instanceof BigDecimal) {BigDecimal bd = (BigDecimal) value;return bd.toPlainString();} else if (value instanceof String) {return "" + value;}return null;}});System.out.println(one.toString());System.out.println(oneDif.toString());}// 目标无setter,不能复制,注意此处,网上说会报错,但是新版本并无此报错public static void noSetterCopy() {one one = new one();one.setId(1);one.setName("one");final BeanCopier copier = BeanCopier.create(one.class, oneNoSetter.class, false);oneNoSetter oneNoSetter = new oneNoSetter();copier.copy(one, oneNoSetter, null);System.out.println(one.toString());System.out.println(oneNoSetter.toString());}// 源无setter,都不能赋值了好吧?public static void noSetterCopy2() {}// 目标少setter,少setter的没值public static void lessSetterCopy() {one one = new one();one.setId(1);one.setName("one");final BeanCopier copier = BeanCopier.create(one.class, oneLessSetter.class, false);oneLessSetter oneLessSetter = new oneLessSetter();copier.copy(one, oneLessSetter, null);System.out.println(one.toString());System.out.println(oneLessSetter.toString());}// 源少setter,只有有setter的可以复制public static void lessSetterCopy2() {oneLessSetter oneLessSetter = new oneLessSetter();
//        oneLessSetter.setId(1);oneLessSetter.setName("one");final BeanCopier copier = BeanCopier.create(oneLessSetter.class, one.class, false);one one = new one();copier.copy(oneLessSetter, one, null);System.out.println(oneLessSetter.toString());System.out.println(one.toString());}
}

下面是pojo类

public class one {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;}private int id;private String name;@Overridepublic String toString() {return " one{  "+ " \n id : " + this.id+ " \n name : " + this.name+"  \n }";}
}

public class two {private int id;private String name;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;}@Overridepublic String toString() {return " two{  "+ " \n id : " + this.id+ " \n name : " + this.name+ "  \n }";}
}

public class oneDif {private Integer id;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}private String name;@Overridepublic String toString() {return " oneDif{  "+ " \n id : " + this.id+ " \n name : " + this.name+ " \n }";}
}

public class oneLessSetter {public int getId() {return id;}public String getName() {return name;}private int id;public void setName(String name) {this.name = name;}private String name;@Overridepublic String toString() {return " oneLessSetter{  "+ " \n id : " + this.id+ " \n name : " + this.name+ " \n }";}
}

package com.lgp.thinkinjavademos.demo.BeanCopier;/*** @AUTHOR lgp* @DATE 2018/6/25 16:06* @DESCRIPTION**/
public class oneNoSetter {public int getId() {return id;}public String getName() {return name;}private int id;private String name;@Overridepublic String toString() {return " oneNoSetter{  "+ " \n id : " + this.id+ " \n name : " + this.name+ " \n }";}
}

放入缓存,提高性能

public class CachedBeanCopier {//    创建过的BeanCopier实例放到缓存中,下次可以直接获取,提升性能static final Map<String, BeanCopier> BEAN_COPIERS = new HashMap<String, BeanCopier>();public static void copy(Object srcObj, Object destObj) {String key = genKey(srcObj.getClass(), destObj.getClass());BeanCopier copier = null;if (!BEAN_COPIERS.containsKey(key)) {copier = BeanCopier.create(srcObj.getClass(), destObj.getClass(), false);BEAN_COPIERS.put(key, copier);} else {copier = BEAN_COPIERS.get(key);}copier.copy(srcObj, destObj, null);}private static String genKey(Class<?> srcClazz, Class<?> destClazz) {return srcClazz.getName() + destClazz.getName();}
}

转载于:https://www.cnblogs.com/ydymz/p/9225145.html

BeanCopier使用说明相关推荐

  1. java项目使用说明_java项目 BeanCopier使用说明

    public classBeanCopierTest {static SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:m ...

  2. 使用BeanCopier工具类拷贝JavaBean

    JavaBean拷贝 深拷贝和浅拷贝概念 浅拷贝 Shallow Copy 对基本类型的属性会进行值传递,当修改其中一个对象中的属性时,不会影响另一个对象中的属性 对引用数据的属性,比如数组或某类对象 ...

  3. abaqus高性能服务器怎么用,高性能计算平台ABAQUS任务调度使用说明作者陈林E-Mailchenlin.PDF...

    高性能计算平台ABAQUS任务调度使用说明作者陈林E-Mailchenlin.PDF 高性能计算平台ABAQUS 任务调度使用说明 作者:陈林 E-Mail:chenlin@ 日期:2017-1-10 ...

  4. linux 文件拷贝并替换,Linux_cmd replace 文件替换使用说明,帮助信息: 复制代码 代码如 - phpStudy...

    cmd replace 文件替换使用说明 帮助信息: 复制代码 代码如下: 替换文件. REPLACE [drive1:][path1]filename [drive2:][path2] [/A] [ ...

  5. Simple Dynamic Strings(SDS)源码解析和使用说明二

    在<Simple Dynamic Strings(SDS)源码解析和使用说明一>文中,我们分析了SDS库中数据的基本结构和创建.释放等方法.本文将介绍其一些其他方法及实现.(转载请指明出于 ...

  6. Delphi开发的IOCP测试Demo以及使用说明。

    Delphi开发的IOCP,此为压力测试Demo和使用说明.

  7. oracle database link mysql_oracle database link使用说明

    oracle database link使用说明 作用: 将多个oracle数据库逻辑上看成一个数据库,也就是说在一个数据库中可以操作另一个数据库中的对象. 简易语法: CREATE [PUBLIC] ...

  8. 序列拼接工具Bowtie使用说明

    序列拼接工具Bowtie使用说明 2011-06-08 ~ ADMIN Bowtie是一个超级快速的,较为节省内存的短序列拼接至模板基因组的工具.它在拼接35碱基长度的序列时,可以达到每小时2.5亿次 ...

  9. benchmarksql测试mysql_数据库压力测试工具 -- BenchmarkSQL 使用说明

    关于数据库的压力测试,之前写过3篇Blog: 数据库基准测试(Database Benchmarking) 说明 数据库压力测试工具 -- Hammerdb 使用说明 数据库压力测试工具 -- Swi ...

最新文章

  1. AngularDart Material Design 输入
  2. 你想要的宏基因组-微生物组知识全在这(190101)
  3. 从民工到CCNA-献给想考认证的朋友
  4. vsftp认证之pam_mysql
  5. ML:推荐给小白入门机器学习一系列书籍
  6. Python - 列表与字符串的互相转换
  7. Java数据类型和MySql数据类型对应表
  8. 高一计算机常考内容,高一信息科技合格考知识点.doc
  9. IBM计划未来四年在美聘用2000名退伍军人
  10. 计算机组成原理实...,计算机组成原理实报告-杨睿.doc
  11. Spring 之注解事务 @Transactional
  12. android仿空间photoview,PickPhotoView:一个Android照片选择器
  13. python车牌字符分割_OpenCV+Python识别车牌和字符分割的实现
  14. python数据挖掘orange
  15. Android-Adapter-View复用机制
  16. 基于windows10+Anaconda3+Python搭建配置TensorFlow、Keras、Jupyter Notebook库,下载Kaggle狗猫数据集完成原始数据直接训练和数据增强后训练
  17. 【真人手势动画制作软件】万彩手影大师教程 | 预览、保存及发布视频
  18. hive数据库无主键进行去重SQL
  19. 吐血实践-TiDB离线安装
  20. API查q绑定带反查sgk带接口API文件源码

热门文章

  1. 计算机安全类论文题目,★计算机络安全论文题目计算机络安全毕业论文题目大全计算机络安全论文选题参考...
  2. python什么证书最有价值,python考什么证含金量高
  3. Docker - 单独搭建部署应用服务(Nginx+Php+Mysql+Redis)
  4. 哪些服务器支持 9200系列CPU,核心暴增、修复漏洞:intel 英特尔 发布 Xeon Platinum 9200和8200系列 处理器...
  5. java%3c%3e符号,有趣的 JavaScript 格式转换
  6. python java php c#_Python和Java、PHP、C、C#、C++等其他语言的对比?
  7. 6. 利用word的替换功能可以完成很多工作——word高级替换技巧
  8. 开源项目SMSS开发指南(二)——基于libevent的线程池
  9. ubuntu20.04 GPU基准测试
  10. 从零学习数据结构与算法---基础与课前准备笔记