【代码工具】Orika JavaBean映射工具探秘
转自:https://www.cnblogs.com/albert1024/articles/8434741.html
Orika是一个简单、快速的JavaBean拷贝框架,Orika使用字节代码生成来创建具有最小开销的快速映射器。
关于:
作为开发人员,我们必须为业务问题提供解决方案,我们希望利用我们的时间来做真正重要的事情。在我们的时代,企业应用程序变得越来越复杂,有大量的体系结构和设计约束。
设计的约束会产生大量的机械工作。许多开源项目都在我们的手中,有一些很好的工具来面对这样的复杂性,比如,Guice,Hibernate,Wicket。我们有很多可用的选项来解决整个问题的每个部分。然而,所有这些不同的工具/框架/库,是很常见的,它通常需要我们把对象转换格式化,以适应不同的api,甚至我们可能是因为自己的设计原因需要在不同的业务层之间转换格式;为了完成这一任务,我们需要编写映射代码来将值从一种类型复制到另一种类型。
在一个中型到大型的项目中,这样的映射代码可以达到相当大的工作量(枯燥的)工作,而这些工作很难维护、测试和调试。
Orika试图为你做这一乏味的工作,在性能上几乎没有什么可衡量的平衡
它将自动收集类的元数据来生成映射对象,这些映射对象可以一起使用,以递归地将数据从一个对象图复制到另一个对象图。Orika试图提供许多方便的功能,同时保持相对简单和开放的状态——让你有可能扩展和调整它,以满足你的需要。
准备:
- 在maven中添加依赖
|
1
2
3
4
5
|
<dependency> <groupId>ma.glasnost.orika</groupId> <artifactId>orika-core</artifactId> <version>1.4.2</version><!-- or latest version --></dependency> |
使用:
- 创建2个用于测试的Java Bean

1 public class Person {
2 private Integer id;
3 private String name;
4 private Integer sex;
5
6 private String ext1;
7
8 public String getExt1() {
9 return ext1;
10 }
11
12 public void setExt1(String ext1) {
13 this.ext1 = ext1;
14 }
15
16 public Integer getId() {
17 return id;
18 }
19
20 public void setId(Integer id) {
21 this.id = id;
22 }
23
24 public String getName() {
25 return name;
26 }
27
28 public void setName(String name) {
29 this.name = name;
30 }
31
32 public Integer getSex() {
33 return sex;
34 }
35
36 public void setSex(Integer sex) {
37 this.sex = sex;
38 }
39
40 }


1 public class PersonDTO {
2 private Integer id;
3 private String name;
4 private Integer sex;
5
6 private String ext2;
7
8 public String getExt2() {
9 return ext2;
10 }
11
12 public void setExt2(String ext2) {
13 this.ext2 = ext2;
14 }
15
16 public Integer getId() {
17 return id;
18 }
19
20 public void setId(Integer id) {
21 this.id = id;
22 }
23
24 public String getName() {
25 return name;
26 }
27
28 public void setName(String name) {
29 this.name = name;
30 }
31
32 public Integer getSex() {
33 return sex;
34 }
35
36 public void setSex(Integer sex) {
37 this.sex = sex;
38 }
39
40
41 }

- 普通映射

1 public class OrikaTest {
2 public static void main(String[] args) {
3 MapperFactory mapperFactory = new DefaultMapperFactory.Builder().build();
4 MapperFacade mapper = mapperFactory.getMapperFacade();
5
6 Person person = new Person();
7 person.setId(1);
8 person.setName("小王");
9 person.setSex(1);
10 person.setExt1("ext1");
11
12 PersonDTO personDTO = mapper.map(person, PersonDTO.class);
13 System.out.println(JSON.toJSONString(personDTO));
14 }
15
16 }
输出结果:{"id":1,"name":"小王","sex":1}

- 假设你映射的对象的一些字段的名称并不匹配,你可以通过ClassMapBuider API来为这些不同的fields注册映射关系:

1 public class OrikaTest {
2 public static void main(String[] args) {
3 MapperFactory mapperFactory = new DefaultMapperFactory.Builder().build();
4 mapperFactory.classMap(Person.class, PersonDTO.class).field("ext1", "ext2").byDefault().register();
5 MapperFacade mapper = mapperFactory.getMapperFacade();
6
7 Person person = new Person();
8 person.setId(1);
9 person.setName("小王");
10 person.setSex(1);
11 person.setExt1("ext...");
12
13 PersonDTO personDTO = mapper.map(person, PersonDTO.class);
14 System.out.println(JSON.toJSONString(personDTO));
15 }
16
17 }
输出结果:{"ext2":"ext...","id":1,"name":"小王","sex":1}

- 假设你映射的对象中有的字段你不想copy,你可以通过exclude进行过滤

1 public class OrikaTest {
2 public static void main(String[] args) {
3 MapperFactory mapperFactory = new DefaultMapperFactory.Builder().build();
4 mapperFactory.classMap(PersonDTO.class, Person.class).exclude("sex").byDefault().register();
5 MapperFacade mapper = mapperFactory.getMapperFacade();
6
7 Person person = new Person();
8 person.setId(1);
9 person.setName("小王");
10 person.setSex(1);
11
12 PersonDTO personDTO = mapper.map(person, PersonDTO.class);
13 System.out.println(JSON.toJSONString(personDTO));
14 }
15
16 }
输出结果:{"id":1,"name":"小王"}

【代码工具】Orika JavaBean映射工具探秘的更多相关文章
- Orika JavaBean映射工具探秘
Orika是一个简单.快速的JavaBean拷贝框架,Orika使用字节代码生成来创建具有最小开销的快速映射器. 关于: 作为开发人员,我们必须为业务问题提供解决方案,我们希望利用我们的时间来做真正重 ...
- JavaBean映射工具dozer学习
阅读更多 转载自http://lishaorui.iteye.com/blog/1151513 1.简介 dozer是一种JavaBean的映射工具,类似于apache的BeanUtils.但 ...
- 常见Bean映射工具分析评测及Orika介绍
原地址:http://tech.dianwoda.com/2017/11/04/gao-xing-neng-te-xing-feng-fu-de-beanying-she-gong-ju-orika/ ...
- Bean映射工具之Apache BeanUtils VS Spring BeanUtils
背景 在我们实际项目开发过程中,我们经常需要将不同的两个对象实例进行属性复制,从而基于源对象的属性信息进行后续操作,而不改变源对象的属性信息,比如DTO数据传输对象和数据对象DO,我们需要将DO对象进 ...
- Java bean常见映射工具分析和比较
1. 概述 日常Java开发项目中,我们经常需要将对象转换成其他形式的对象,因此我们需要编写映射代码将对象中的属性值从一种类型转换成另一种类型. 进行这种转换除了手动编写大量的get/set代码,还可 ...
- EF架构~AutoMapper对象映射工具简化了实体赋值的过程
回到目录 AutoMapper是一个.NET的对象映射工具,一般地,我们进行面向服务的开发时,都会涉及到DTO的概念,即数据传输对象,而为了减少系统的负载,一般我们不会把整个表的字段作为传输的数据,而 ...
- 根据表结构自动生成JavaBean,史上最强最专业的表结构转JavaBean的工具(第2版)
目录: 第1版:http://blog.csdn.net/vipbooks/article/details/51912143 ...
- .NET的DTO映射工具AutoMapper
.NET的DTO映射工具AutoMapper 原文:https://github.com/AutoMapper/AutoMapper/wiki/Getting-started 参考:http://ww ...
- .NET的对象映射工具AutoMapper使用笔记
AutoMapper是一个.NET的对象映射工具. 项目地址:https://github.com/AutoMapper/AutoMapper. 帮助文档:https://github.com/Aut ...
随机推荐
- 【多线程】ConcurrentLinkedQueue 的实现原理
1. 引言 在并发编程中我们有时候需要使用线程安全的队列.如果我们要实现一个线程安全的队列有两种实现方式:一种是使用阻塞算法,另一种是使用非阻塞算法.使用阻塞算法的队列可以用一个锁(入队和出队用同一把 ...
- 揭秘阿里云WAF背后神秘的AI智能防御体系
背景 应用安全领域,各类攻击长久以来都危害着互联网上的应用,在web应用安全风险中,各类注入.跨站等攻击仍然占据着较前的位置.WAF(Web应用防火墙)正是为防御和阻断这类攻击而存在,也正是这些针对W ...
- HTML5: HTML5 内联 SVG
ylbtech-HTML5: HTML5 内联 SVG 1.返回顶部 1. HTML5 内联 SVG HTML5 支持内联 SVG. 什么是SVG? SVG 指可伸缩矢量图形 (Scalable Ve ...
- PAT甲级——A1149DangerousGoodsPackaging【25】
When shipping goods with containers, we have to be careful not to pack some incompatible goods into ...
- prim算法【最小生成树1】
适用范围:要求无向图 prim算法(读者可以将其读作“普里姆算法”)用来解决最小生成树问题, 其基本思想是: ·对图G(VE)设置集合S,存放已被访问的顶点, ·然后每次从集合V-S中选择与集合S的最 ...
- QTP - excel操作
1. 以数据库的形式访问Excel 通常,我们与Excel的交互,是通过创建Excel对象的方式: Set ExcelApp = CreateObject("Excel.Applicatio ...
- java 并发——AbstractQueuedSynchronizer
java 并发--AbstractQueuedSynchronizer 简介 abstract class AbstractQueuedSynchronizer extends AbstractOwn ...
- 数据持久化之轻量级Kv持久化(二)
阿里P7Android高级架构进阶视频免费学习请点击:https://space.bilibili.com/474380680本篇文章将继续从以下两个内容来介绍轻量级Kv持久化: [SharedPre ...
- C# winform 将其他程序嵌入Form窗体
嵌入类 public class ExeImpaction { public void FrmClosing() { try { if (!process.HasExited) process.Kil ...
- mac 密码重置
首先请开机或重新启动系统,在电脑刚启动时,请按下键盘上的 command+S 组合键不动, 接下来会在屏幕上看到一串串的命令字符显示,当进入安全模式以后,会看到 一个 root 开始的命令行输入端口. ...