BeanCopier使用说明
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() {
@Override
public 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;
@Override
public 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;
}
@Override
public 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;
@Override
public 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;
@Override
public 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; @Override
public 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();
}
}
BeanCopier使用说明的更多相关文章
- Atitit.项目修改补丁打包工具 使用说明
Atitit.项目修改补丁打包工具 使用说明 1.1. 打包工具已经在群里面.打包工具.bat1 1.2. 使用方法:放在项目主目录下,执行即可1 1.3. 打包工具的原理以及要打包的项目列表1 1. ...
- awk使用说明
原文地址:http://www.cnblogs.com/verrion/p/awk_usage.html Awk使用说明 运维必须掌握的三剑客工具:grep(文件内容过滤器),sed(数据流处理器), ...
- “我爱背单词”beta版发布与使用说明
我爱背单词BETA版本发布 第二轮迭代终于画上圆满句号,我们的“我爱背单词”beta版本已经发布. Beta版本说明 项目名称 我爱背单词 版本 Beta版 团队名称 北京航空航天大学计算机学院 拒 ...
- Oracle 中 union 和union all 的简单使用说明
1.刚刚工作不久,经常接触oracle,但是对oracle很多东西都不是很熟.今天我们来了解一下union和union all的简单使用说明.Union(union all): 指令的目的是将两个 S ...
- Map工具系列-02-数据迁移工具使用说明
所有cs端工具集成了一个工具面板 -打开(IE) Map工具系列-01-Map代码生成工具说明 Map工具系列-02-数据迁移工具使用说明 Map工具系列-03-代码生成BySQl工具使用说明 Map ...
- Map工具系列-03-代码生成BySQl工具使用说明
所有cs端工具集成了一个工具面板 -打开(IE) Map工具系列-01-Map代码生成工具说明 Map工具系列-02-数据迁移工具使用说明 Map工具系列-03-代码生成BySQl工具使用说明 Map ...
- jQuery验证控件jquery.validate.js使用说明
官网地址:http://bassistance.de/jquery-plugins/jquery-plugin-validation jQuery plugin: Validation 使用说明 转载 ...
- gdbsever 使用说明
gdbsever 使用说明 在新塘N3292x平台下 编译 gdbsever ./configure --target=arm-linux --host=arm-linux arm-linux-gdb ...
- mongoVUE的增删改查操作使用说明
mongoVUE的增删改查操作使用说明 一. 查询 1. 精确查询 1)右键点击集合名,再左键点击Find 或者直接点击工具栏上的Find 2)查询界面,包括四个区域 {Find}区,查询条件格式{& ...
随机推荐
- BaseAdapter/AsyncTask/..等等细节
BaseAdapter中的getCount之类的函数,是在constructor之后才启动的.这印证了构造函数的优先级是max的. 图片 这一点的意义在于,当你想给getCount返回一个具体参数的时 ...
- MySQL业务-发放的优惠券 用户使用情况_20161028
运营部门给用户发放优惠券,如果想监控优惠券的使用效果 优惠券使用率是个反映效果的很好指标 下面sql就是针对某天对特定用户发放的优惠券在发放日期以后每天的使用情况 SELECT e.城市,e.用户ID ...
- kettle及数据库导数_20160920
一.kettle是什么. Kettle是一款国外开源的ETL( Extract-Transform-Load 的缩写,用来描述将数据从来源端经过抽取(extract).转换(transform).加载 ...
- drop asm disk、撤销drop asm disk
drop asm disk.撤销drop asm disk drop asm disk:SQL> alter diskgroup XXX offline disk XXXX drop after ...
- Codeplus2017 12月赛——可做题1
题目:https://www.luogu.org/problemnew/show/P4030 可以发现一个矩阵是巧妙矩阵当且仅当其所有二阶子矩阵都是巧妙矩阵: 将不巧妙的二阶矩阵计为1,维护二维前缀和 ...
- VIJOS:P1082丛林探险
描述 东非大裂谷中有一片神秘的丛林,是全世界探险家的乐园,著名黄皮肤探险家BB一直想去试试.正好我国科学家2005年4月将首次对东非大裂谷进行科考,BB决定随科考队去神秘丛林探险.在出发之前,他搜集了 ...
- Day09: socket网络编程-OSI七层协议,tcp/udp套接字,tcp粘包问题,socketserver
今日内容:socket网络编程 1.OSI七层协议 2.基于tcp协议的套接字通信 3.模拟ssh远程执行命令 4.tcp的粘包问题及解决方案 5.基于udp协议的套接字 ...
- Java多线程运行机制的基本原理
Java多线程运行机制的基本原理 进程和线程的区别 进程 进程是一个程序执行的实例,比如说我们打开10个IE浏览器窗口,那么就有10个进程开启.一个进程可以同时被运行若干次,进程是CPU进行资源分配和 ...
- 26.OpenIdConnect获取用户信息的两种方式
openId在OAuth基础之上,在下面这红框内拿到Authorization Code之后还可以返回IdToken. IdToken和AccessToken一起返回.IdToken就会包括了用户的信 ...
- iframe和window对象的关系
浏览器会在其打开一个 HTML 文档时创建一个对应的 window 对象.但是,如果一个文档定义了一个或多个框架(即,包含一个或多个 frame 或 iframe 标签),浏览器就会为原始文档创建一个 ...