orika core工具对实体(Bean)进行深度拷贝
1. 在pom.xml中添加orika core依赖:
<!-- https://mvnrepository.com/artifact/ma.glasnost.orika/orika-core -->
<dependency>
<groupId>ma.glasnost.orika</groupId>
<artifactId>orika-core</artifactId>
<version>1.4.1</version>
</dependency>
2.1. 指定属性名
User1和User2是两个实体,部分属性一致:
User1.java 如下:
public class User1 {
private String name;
private Integer age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
@Override
public String toString() {
return "User1{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
User2.java如下:
public class User2 {
private String name2;
private Integer age;
private String agent;
public String getName2() {
return name2;
}
public void setName2(String name2) {
this.name2 = name2;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getAgent() {
return agent;
}
public void setAgent(String agent) {
this.agent = agent;
}
@Override
public String toString() {
return "User2{" +
"name2='" + name2 + '\'' +
", age=" + age +
", agent='" + agent + '\'' +
'}';
}
}
使用orika core可以将User1的内容复制到User2,对于属性名不一致的,可以手动设置对应的field,属性名一致的则可以忽略不显式说明:
import ma.glasnost.orika.MapperFacade;
import ma.glasnost.orika.MapperFactory;
import ma.glasnost.orika.impl.DefaultMapperFactory; public class Demo03 {
public static void main(String[] args) {
MapperFactory mapperFactory = new DefaultMapperFactory.Builder().build();
mapperFactory.classMap(User1.class, User2.class)
.field("name", "name2")
.byDefault()
.register(); User1 user1 = new User1();
user1.setName("user1");
user1.setAge(1); MapperFacade mapperFacade = mapperFactory.getMapperFacade();
User2 user2 = mapperFacade.map(user1, User2.class);
System.out.printf("user2: " + user2.toString());
}
}
输出结果:
user2: User2{name='user1', age=1, agent='null'}
2.2. 可以编写通用的工具类,对同样的属性名进行拷贝:
import ma.glasnost.orika.MapperFacade;
import ma.glasnost.orika.MapperFactory;
import ma.glasnost.orika.impl.DefaultMapperFactory; import java.util.List; public class OrikaBeanMapper {
private static final MapperFacade mapperFacade; static {
MapperFactory mapperFactory = new DefaultMapperFactory.Builder().useAutoMapping(true).mapNulls(true).build();
mapperFacade = mapperFactory.getMapperFacade();
} public static <S, D> void map(S from, D to) {
mapperFacade.map(from, to);
} public static <S, D> D map(S from, Class<D> clazz) {
return mapperFacade.map(from, clazz);
} public static MapperFacade getMapperFacade() {
return mapperFacade;
} public static <S, D> List<D> mapAsList(Iterable<S> source, Class<D> destinationClass) {
return mapperFacade.mapAsList(source, destinationClass);
}
}
通用工具类的使用:
public class Demo04 {
public static void main(String[] args) {
User1 user1 = new User1();
user1.setAge(1);
user1.setName("user1");
User2 user2 = OrikaBeanMapper.map(user1, User2.class);
System.out.println(user2.toString());
}
}
输出结果:
User2{name2='null', age=1, agent='null'}
orika core工具对实体(Bean)进行深度拷贝的更多相关文章
- 对象属性拷贝工具类大全==>Bean的属性拷贝从此不用愁
大家在做java开发时,肯定会遇到api层参数对象传递给服务层,或者把service层的对象传递给dao层,他们之间又不是同一个类型对象,但字段又是一样,如果还是用普通的get.set方式来处理话,比 ...
- 持久化API(JPA)系列(三)实体Bean的开发技术-建立与数据库的连接
在EJB 2.x中.EJB有3种类型的Bean.各自是会话Bean(Session Bean).消息驱动Bean(Message-Driven Bean)和实体Bean(Entity Bean). 随 ...
- 序列化工具类({对实体Bean进行序列化操作.},{将字节数组反序列化为实体Bean.})
package com.dsj.gdbd.utils.serialize; import java.io.ByteArrayInputStream; import java.io.ByteArrayO ...
- 把实体bean对象转换成DBObject工具类
import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.util ...
- 谈谈序列化—实体bean一定要实现Serializable接口?
导读:最近在做项目的过程中,发现一个问题,就是我们最开始的时候,传递参数包括返回类型,都有map类型.但是由于map每次都要匹配key值,很麻烦.所以在之后就将参数传递和返回类型全都改成了实体bean ...
- 『.NET Core CLI工具文档』(二).NET Core 工具遥测(应用信息收集)
说明:本文是个人翻译文章,由于个人水平有限,有不对的地方请大家帮忙更正. 原文:.NET Core Tools Telemetry 翻译:.NET Core 工具遥测(应用信息收集) .NET Cor ...
- hibernate查询部分字段转换成实体bean
//hibernate查询部分字段转换成实体bean /** * 查询线路信息 */ @Override public List<Line> getSimpleLineListByTj(M ...
- EJB_开发单表映射的实体bean
开发单表映射的实体bean 实体bean 它属于java持久化规范(JPA)里的技术,实体bean通过元数据在Javabean和数据库表之间建立起映射关系,然后Java程序员就可以随心所欲的使用面向对 ...
- ABAP表生成Java实体Bean
项目中需要将HR模块中的表数据同步到Java系统中,向外围系统提供分发与查询服务,涉及到的表有两百多张,字段好几千上万个,如果手工一张张这些ABAP表在Java系统数据库中创建一遍的话,工作量将非常大 ...
随机推荐
- 通过script src引入ElementUI时,使用语句:window.ELEMENT.MessageBox.alert(xxx) 调用弹出框
通过script src引入ElementUI时,使用语句:window.ELEMENT.MessageBox.alert(xxx) 调用弹出框.
- 【转】Lambda表达式详解
前言 1.天真热,程序员活着不易,星期天,也要顶着火辣辣的太阳,总结这些东西. 2.夸夸lambda吧:简化了匿名委托的使用,让你让代码更加简洁,优雅.据说它是微软自c#1.0后新增的最重要的功能之一 ...
- redis 如何查看所有的key
可以使用KEYS 命令 KEYS pattern 例如, 列出所有的key redis> keys * 列出匹配的key redis>keys apple* 1) apple1 2) ap ...
- 认识数据-数据的计量尺度(Levels of Measurement)
一. 数据的计量尺度(Levels of Measurement) 一般认为,数据是对客观现象计量的结果.按照对事物计量的精确程度,可将所采用的计量尺度由低级到高级分为四个层次: 1.定类尺度(Nom ...
- OpenEXR的输出机制
最近在一直在研究OpenEXR这个软件.这个软件的图像输出机制很有意思,特地分享一下学习心得,就当是笔记了. 我的OpenEXR软件版本是2.2.0,系统平台是win7. 安装完毕OpenEXR之后我 ...
- Thinkphp 视图模型
1.创建视图模型 2.定义视图模型 class BlogViewModel extends ViewModel { public $viewFields = array( 'Blog'=>arr ...
- ipconfig/all详解
Ipconfig/all(win+R-->cmd-->ipconfig/all)最常用的就是显示自己主机的ip了,可以让我们了解自己的计算机是否成功的租用到一个IP地址.但是ipconfi ...
- spring boot编译项目打jar包
<build> <plugins> <!--jar包打包--> <plugin> <groupId>org.springframework. ...
- ALGO-10_蓝桥杯_算法训练_集合运算(排序)
问题描述 给出两个整数集合A.B,求出他们的交集.并集以及B在A中的余集. 输入格式 第一行为一个整数n,表示集合A中的元素个数. 第二行有n个互不相同的用空格隔开的整数,表示集合A中的元素. 第三行 ...
- solr4.9+tomcat7 multiCore
ES不支持groupby,于是想看看solr怎么实现的. 搭建环境: 1)下载tomcat7.solr4.9,解压: 2)配置tomcat7的端口和URIEncoding(utf-8): 3)拷贝so ...