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系统数据库中创建一遍的话,工作量将非常大 ...
随机推荐
- secureCRT 设置证书免密登陆
1 第一步 2 第二步 3 第三步 4 第4 步 ,然后选择你的 私钥文件
- linux shell写入单行、多行内容到文件
1.单行文本 #! /bin/bashecho 'hello world' > filename.txt 2.多行文本 代码1: #! /bin/bashcat>filename.txt& ...
- 阿里云 CentOS安装Git
一.Git的安装 1. 下载Git wget https://github.com/git/git/archive/v2.8.0.tar.gz 2. 安装依赖 sudo yum -y install ...
- GTP+SDI工程播出部分思路整理
GTP+SDI工程播出部分思路整理 1.video_out_to_sdi模块 关于video_out_to_sdi模块的输出信号: tx_video_a_y[9:0] 这是要输入SDI IP核内的 t ...
- 黄聪:保持web页面生成的app一直处于用户登录状态不退出
用户登录了会员中心,怎么保持登录状态! 由于封壳的内核及组件肯定没有浏览器APP应用那么强大,所以目前暂时的解决方案是: jquery.cookie.js 本文转载至:https://www.cnb ...
- 黄聪:Jquery+DataTables插件,如何在ajax调用服务器数据后,自动给tr添加id属性
http://legacy.datatables.net/usage/callbacks#fnRowCallback 主要通过 fnCreatedRow 事件来实现 var table = $('#t ...
- java中构造方法和普通方法的区别
1.普通方法: 定义:简单的说方法就是完成特定功能的代码块. 普通方法定义格式: 修饰符 返回值类型 方法名 (参数类型 参数名1,参数类型 参数名2,.........) { 函数体: re ...
- 关于RabbitMQ分布式集群架构
RabbitMQ分布式集群架构和高可用性(HA) (一) 功能和原理 设计集群的目的 允许消费者和生产者在RabbitMQ节点崩溃的情况下继续运行 通过增加更多的节点来扩展消息通信的吞吐量 1 集群配 ...
- vue之v-show与v-if的区别
为什么data必须返回函数? v-show和v-if的区别 v-if只有在满足条件时才渲染元素,v-show无论是否满足条件都会渲染元素,都会对元素样式的display属性进行控制. v-if可以绑定 ...
- javac命令和java命令
要知道java是分两部分的:一个是编译,一个是运行. javac:负责的是编译的部分,当执行javac时,会启动java的编译器程序.对指定扩展名的.java文件进行编译. 生成了jvm可以识别的字节 ...