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系统数据库中创建一遍的话,工作量将非常大 ...
随机推荐
- 在vue-cli 2.x 项目中,引入stylus的全局CSS变量
出处:https://blog.csdn.net/weixin_39378610/article/details/81140358
- laravel中resource资源路由方法
新增的 resource 方法将遵从 RESTful 架构为用户资源生成路由.该方法接收两个参数,第一个参数为资源名称,第二个参数为控制器名称. Route::resource('users', 'U ...
- typedef定义数组类型
typedef语句定义数组类型 1. 一维数组类型的定义格式 typedef <元素类型关键字><数组类型名>[<常量表达式>]; 例如: (1) typedef ...
- mysql、MS SQL关于分页的sql查询语句 limit 和row_number() OVER函数
在做项目的时候需要些分页,用的数据库是MySQL,之前看到的参考例子是用MS SQL做的,在MS SQL.Oracle里面有ROW_NUMBER() OVER函数可以在数据库里对数据进行分组.百度后的 ...
- spring-jar包及架构介绍
查看博客: http://www.cnblogs.com/ywlaker/p/6136625.html
- 阅读<Video Timing Controller>笔记
阅读<Video Timing Controller>笔记 1.Video Timing Controller Block Diagram 2.Example Video Timing ...
- MHA failover GTID 专题
https://yq.aliyun.com/articles/238882?spm=5176.8067842.tagmain.18.73PjU3 摘要: MHA failover GTID 专题 这里 ...
- kali 安装flash
下载 flash_player_npapi_linux.x86_64.tar.gz 解压: tar -zxvf flash_player_npapi_linux.x86_64.tar.gz 将解压后的 ...
- 黄聪:PHP代码获取客户端IP地址经纬度及所在城市
echo $_SERVER['HTTP_HOST']; //echo $_SERVER['REQUEST_URI']; $getIp=$_SERVER["REMOTE_ADDR"] ...
- Linux bash笔记
关于bash脚本,一般开头都加#!/bin/bash,表示以bash来作为脚本解释器:如果不加的话,就会默认当前用户登陆的shell为脚本解释器(很多情况下为sh,sh与bash不同,有可能导致脚本无 ...