bean copy
最初采用apache beanutils,性能很低。后来转为hutool,但不能复制指定格式的日期,所以采用性能很高的com.github.yangtu222.BeanUtils
它已经实现了 copyBean、copyList、copyArray、copyCollection。而hutool没有实现copyList、copyArray、copyCollection,需要自行封装实现。
pom.xml
<dependency>
<groupId>com.github.yangtu222</groupId>
<artifactId>BeanUtils</artifactId>
<version>1.0.9</version>
</dependency>
项目概览

实现的功能:
1、基本类型
2、Date
3、List/Parent
4、继承
注意要点:
1、如果复制 Date/Pojo,需要在目标类的相应属性上加@CopyProperty,基本类型/List不用。
ToBean
public class ToBean extends MyBase {
private Integer id;
private Double scope;
private String name;
@CopyProperty(convertor=DateConvertor.class)
private String myDate;
@CopyProperty(convertor=DateConvertor2.class)
private Date myDate2;
private List<ToChild> list;
@CopyProperty
private ToParent parent;
}
反之,如果从ToBean复制到FromBean,则也需要在FromBean的相应属性上加@CopyProperty。
FromBean
public class FromBean extends MyBase {
private Integer id;
private Double scope;
private String name;
@CopyProperty(convertor=DateConvertor2.class)
private Date myDate;
@CopyProperty(convertor=DateConvertor.class)
private String myDate2;
private List<FromChild> list;
@CopyProperty
private FromParent parent;
}
如果不会从ToBean复制到FromBean,那么FromBean里的相应属性不需要加@CopyProperty。
2、日期转换需要实现BeanCopyConvertor
DateConvertor:Date-->String
public class DateConvertor implements BeanCopyConvertor<Date, String> {
@Override
public String convertTo(Date object) {
if( object == null ) {
object = new Date();
}
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
return format.format(object);
}
}
DateConvertor2:String--->Date
public class DateConvertor2 implements BeanCopyConvertor<String,Date> {
@Override
public Date convertTo(String object) {
if( object == null ) {
return null;
}
return DateUtil.parse(object, "yyyy-MM-dd");
}
}
测试1:from--->to
@Test
public void from2to() throws Exception {
FromBean from = new FromBean();
from.setId(1);
from.setScope(98.6);
from.setName("遥远2");
from.setMyDate(DateTime.now());
from.setMyDate2(DateUtil.now()); from.setIsDelete(false);
from.setList(CollUtil.newArrayList(new FromChild("子1"),new FromChild("子2"),new FromChild("子3")));
from.setParent(new FromParent((byte) 'a')); ToBean toBean = BeanCopyUtils.copyBean(from, ToBean.class);
Console.log(toBean);
}
输出:
ToBean(
super=MyBase(isDelete=false),
id=1,
scope=98.6,
name=遥远2,
myDate=2019-01-16,
myDate2=2019-01-16 00:00:00,
list=[
FromChild(childName=子1),
FromChild(childName=子2),
FromChild(childName=子3)
],
parent=ToParent(sign=97)
)
测试2:to-->from
@Test
public void to2from() throws Exception {
ToBean to = new ToBean();
to.setId(1);
to.setScope(98.6);
to.setName("遥远2");
to.setMyDate(DateUtil.now());
to.setMyDate2(DateTime.now()); to.setIsDelete(false);
to.setList(CollUtil.newArrayList(new ToChild("子1"),new ToChild("子2"),new ToChild("子3")));
to.setParent(new ToParent((byte) 'b')); FromBean fromBean = BeanCopyUtils.copyBean(to, FromBean.class);
Console.log(fromBean);
}
输出:
FromBean(
id=1,
scope=98.6,
name=遥远2,
myDate=2019-01-16 00:00:00,
myDate2=2019-01-16,
list=[
ToChild(super=com.ebc.beancopy.base.ToChild@6483f5ae,childName=子1),
ToChild(super=com.ebc.beancopy.base.ToChild@b9afc07,childName=子2),
ToChild(super=com.ebc.beancopy.base.ToChild@382db087,childName=子3)
],
parent=FromParent(sign=98))
以上是copyBean。下边是copyList和copyArray的测试
测试3:copyList
@Test
public void testCopyList() throws Exception {
List<FromChild> fromList = CollUtil.newArrayList(new FromChild("子1"),new FromChild("子2"),new FromChild("子3"));
List<ToChild> toList = BeanCopyUtils.copyList(fromList, ToChild.class);
Console.log(toList);
}
输出:
[
ToChild(super=com.ebc.beancopy.base.ToChild@366e2eef, childName=子1),
ToChild(super=com.ebc.beancopy.base.ToChild@6df97b55, childName=子2),
ToChild(super=com.ebc.beancopy.base.ToChild@3cbbc1e0, childName=子3)
]
测试4:copyArray
@Test
public void testCopyArray() throws Exception {
FromChild [] from = {new FromChild("子1"),new FromChild("子2"),new FromChild("子3")};
ToChild [] to = BeanCopyUtils.copyArray(from, ToChild.class);
Console.log(to);
}
输出:
[
ToChild(super=com.ebc.beancopy.base.ToChild@6537cf78, childName=子1),
ToChild(super=com.ebc.beancopy.base.ToChild@67b6d4ae, childName=子2),
ToChild(super=com.ebc.beancopy.base.ToChild@34b7bfc0, childName=子3)
]
bean copy的更多相关文章
- Orika的使用姿势,Orika java bean copy 框架
### 这个java bean copy 比较好用 https://www.jianshu.com/p/271cf6976a3d
- cglib、orika、spring等bean copy工具性能测试和原理分析
简介 在实际项目中,考虑到不同的数据使用者,我们经常要处理 VO.DTO.Entity.DO 等对象的转换,如果手动编写 setter/getter 方法一个个赋值,将非常繁琐且难维护.通常情况下,这 ...
- java泛型&bean copy list
参考:https://www.oracle.com/technetwork/cn/articles/java/juneau-generics-2255374-zhs.html E:元素K:键N:数字T ...
- 编写更少量的代码:使用apache commons工具类库
Commons-configuration Commons-FileUpload Commons DbUtils Commons BeanUtils Commons CLI Commo ...
- Apache Commons 工具集
一.Commons BeanUtils http://jakarta.apache.org/commons/beanutils/index.html 说明:针对Bean的一个工具集.由于Bean往往是 ...
- Apache Commons 工具集使用简介
Apache Commons包含了很多开源的工具,用于解决平时编程经常会遇到的问题,减少重复劳动.我选了一些比较常用的项目做简单介绍.文中用了很多网上现成的东西,我只是做了一个汇总整理. 一.Comm ...
- Apache common包应用集合
一.Commons BeanUtils http://jakarta.apache.org/commons/beanutils/index.html 说明:针对Bean的一个工具集.由于Bean往往是 ...
- CGLIB学习笔记
0 概述 CGLIB基于ASM实现.提供比反射更为强大的动态特性.使用CGLIB可以非常方便的实现的动态代理. 0.1 CGLIB包结构 net.sf.cglib.core 底层字节码处理类. ...
- Apache Jakarta Commons 工具集简介
Apache Jakarta Commons 工具集简介[转] Apache Commons包含了很多开源的工具,用于解决平时编程经常会遇到的问题,减少重复劳动.我选了一些比较常用的项目做简单介绍.文 ...
随机推荐
- 洛谷P2146 树链剖分
题意 思路:直接树链剖分,用线段树维护即可,算是树剖的经典题目吧. 代码: #include <bits/stdc++.h> #define ls(x) (x << 1) #d ...
- CentOS7下安装pip和pip3
1.首先检查linux有没有安装python-pip包,直接执行 yum install python-pip 2.没有python-pip包就执行命令 yum -y install epel-rel ...
- JDBC03 利用JDBC实现事务提交与回滚【调用Connection中的方法实现事务管理】
目录 1 Connection中的重用方法 2 JDBC事务管理经典案例 1 Connection类中常用的方法回顾 1.1 Statement createStatement() throws SQ ...
- 转:c语言学习笔记 二进制和十进制的互相转化
http://www.cnblogs.com/xkfz007/articles/2590472.html
- Python程序设计4——控制语句
1 print和import的更多信息 1.1 使用逗号输出 前面已经讲解过如何使用print来打印表达式,可以使用都好来打印多个表达式,只要用逗号隔开即可. >>> print ' ...
- C++面试笔记--排序
这里我们开始复习排序的一些面试题. 首先我们来看一下各个排序方法的时间复杂度和稳定性的比较,见下面表格: 排序法 平均时间 最差情形 稳定度 额外空间 备注 冒泡 O(n2) O(n2) 稳定 ...
- php获取数据库结果集
PHP经常要访问数据库提前数据库里面的数据,那么该怎么样去提前数据呢? 提取数据库代码如下: <?phpinclude("conn.php");//数据库连接 $sql=&q ...
- 日常学习随笔-自定义了一个MyArrayListDefin集合(数组扩容+迭代器+JDK1.8新方法+详细说明)
一.自定义了一个ArrayList的模拟集合(源码+详细说明) 前段时间分析了下ArrayList集合的源码,总觉得如果不自己定义一个的话,好像缺了点什么,所以有了如下的代码. 代码可以说是逐行注释了 ...
- python之编辑器pycharm
在进行python开发的时候,习惯使用pycharm这个编辑器进行开发工作,总结一些常用到的功能点 常用功能: 1. 打开当前文件所在的目录 在文件右击 -> Show in Exploer ...
- datetime问题
DateUtil.format(DateTime.now(), DatePattern.NORM_DATE_PATTERN);. 此方法将现在时间转为yy--mm--dd格式 mysql中日期运算 ...