转自: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映射工具探秘的更多相关文章

  1. Orika JavaBean映射工具探秘

    Orika是一个简单.快速的JavaBean拷贝框架,Orika使用字节代码生成来创建具有最小开销的快速映射器. 关于: 作为开发人员,我们必须为业务问题提供解决方案,我们希望利用我们的时间来做真正重 ...

  2. JavaBean映射工具dozer学习

    阅读更多 转载自http://lishaorui.iteye.com/blog/1151513 1.简介     dozer是一种JavaBean的映射工具,类似于apache的BeanUtils.但 ...

  3. 常见Bean映射工具分析评测及Orika介绍

    原地址:http://tech.dianwoda.com/2017/11/04/gao-xing-neng-te-xing-feng-fu-de-beanying-she-gong-ju-orika/ ...

  4. Bean映射工具之Apache BeanUtils VS Spring BeanUtils

    背景 在我们实际项目开发过程中,我们经常需要将不同的两个对象实例进行属性复制,从而基于源对象的属性信息进行后续操作,而不改变源对象的属性信息,比如DTO数据传输对象和数据对象DO,我们需要将DO对象进 ...

  5. Java bean常见映射工具分析和比较

    1. 概述 日常Java开发项目中,我们经常需要将对象转换成其他形式的对象,因此我们需要编写映射代码将对象中的属性值从一种类型转换成另一种类型. 进行这种转换除了手动编写大量的get/set代码,还可 ...

  6. EF架构~AutoMapper对象映射工具简化了实体赋值的过程

    回到目录 AutoMapper是一个.NET的对象映射工具,一般地,我们进行面向服务的开发时,都会涉及到DTO的概念,即数据传输对象,而为了减少系统的负载,一般我们不会把整个表的字段作为传输的数据,而 ...

  7. 根据表结构自动生成JavaBean,史上最强最专业的表结构转JavaBean的工具(第2版)

             目录:                 第1版:http://blog.csdn.net/vipbooks/article/details/51912143              ...

  8. .NET的DTO映射工具AutoMapper

    .NET的DTO映射工具AutoMapper 原文:https://github.com/AutoMapper/AutoMapper/wiki/Getting-started 参考:http://ww ...

  9. .NET的对象映射工具AutoMapper使用笔记

    AutoMapper是一个.NET的对象映射工具. 项目地址:https://github.com/AutoMapper/AutoMapper. 帮助文档:https://github.com/Aut ...

随机推荐

  1. 在Anaconda环境下使用Jupyter Notebook

    !!!Anaconda 和 Jupyter Notebook 在 zsh 环境下不能正常使用! 启动建立的 Anaconda 环境 安装 nb_conda:conda install nb_conda ...

  2. Halo(五)

    ApplicationPreparedEvent 监听事件 Event published once the application context has been refreshed but be ...

  3. C++11之列表初始化

    1. 在C++98中,标准允许使用花括号{}来对数组元素进行统一的集合(列表)初始化操作,如:int buf[] = {0};int arr[] = {1,2,3,4,5,6,7,8}; 可是对于自定 ...

  4. 【Flutter学习】之绘画实例(一)

    一,概述 画布(Canvas) 画布是一个矩形区域,我们可以控制其每一像素来绘制我们想要的内容 Canvas 拥有多种绘制点.线.路径.矩形.圆形.以及添加图像等的方法,结合这些方法我们可以绘制出千变 ...

  5. 高精度小数BigDecimal+二分——java

    高精度小数第一题 import java.util.*; import java.math.*; public class Main { public static void main(String ...

  6. Oracle中start with...connect by (prior)子句的用法

    connect by 是结构化查询中用到的,基本语法是:select … from tablenamestart with 条件1connect by 条件2where 条件3; 例:select * ...

  7. LR之-参数化

    1.改变参数化主要在于select next now和update value on这个二个选项 sequential:顺序取值 random:随机取值 unique:唯一取值 same line a ...

  8. Linux v4l2编程(摄像头信息采集)

    基于Linux3.4.2,自己做一点儿视频信息采集及网络传输的小实验,边做边学,一些基础知识同步整理..... 1. 定义 V4L2(Video For Linux Two) 是内核提供给应用程序访问 ...

  9. 5. 使用grafana模板

    我们刚刚配置的Dashboard还是有点简陋,为了界面美观,这里我们这里使用一些模板 1.使用node_exporter模板 去grafana官网下载模板,点击Download,如下所示 2.导入模板 ...

  10. JavaScript中 函数的创建和调用

    基础概念:定义函数的方式   一般定义函数有两种方式:    1:函数的声明    2:函数表达式 参考资料:https://blog.csdn.net/xixiruyiruyi/article/de ...