转自: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. qt 学习(六) 数据库注册用户

    做什么: 1 登陆按钮按下出现注册页面, 2 输入账号  判断是否可用   查询数据库,用户名是否已经注册 3 输入密码  判断密码格式 4 输入邮箱  判断邮箱格式   查询数据库,邮箱是否已经注册 ...

  2. OC学习篇之---类目的概念和使用

    上一篇文章介绍了OC中的@class关键字的使用http://blog.csdn.net/jiangwei0910410003/article/details/41774747,这一篇我们介绍一下,O ...

  3. Binary Search - Jump on the Stones

    Binary Search algorithm. Wikipedia definition: In computer science, binary search, also known as hal ...

  4. ListView 分页显示(转载+修改)上

    实习工作中,分配到了一个给已经上线的android成品增加需求的任务,其中一项是给每个信息显示增加分页显示的功能(ListView的显示),于是上网查资料,看到了: 原地址:http://www.cn ...

  5. SQLSERVER 时间日期函数,查询今天日期、昨天、一个星期、半年前的数据

    今天的所有数据:select * from 表名 where DateDiff(dd,datetime类型字段,getdate())=0昨天的所有数据:select * from 表名 where D ...

  6. PouchContainer 容器技术演进助力阿里云原生升级

    点击下载<不一样的 双11 技术:阿里巴巴经济体云原生实践> 作者 | 杨育兵(沈陵) 阿里巴巴高级技术专家 我们从 2016 年开始在集团推广全面的镜像化容器化,今年是集团全面镜像化容器 ...

  7. linux 服务器内存占用统计

    当前内存占用率的计算,是根据top命令显示的Mem.used除以Mem.total得到. Mem.total:表示总物理内存. Mem.used: 表示内核控制的内存数,除了应用程序使用的内存外,还包 ...

  8. 修改maven包本地默认位置

    前言 这段时间上岸了,就有时间整理电脑的资料(强迫症重度患者),就向maven以及gradle的仓库位置动手了. 目的 改变maven的默认位置 步骤 修改maven的配置文件setting.xml( ...

  9. 聊聊redis实际运用及骚操作

    前言 聊起 redis 咱们大部分后端猿应该都不陌生,或多或少都用过.甚至大部分前端猿都知道. 数据结构: string. hash. list. set (无序集合). setsorted(有序集合 ...

  10. 函数节流及手机端点击延迟200ms解决方法

    不论是H5开发还是微信小程序,手机端点击都会有300ms的延迟,在实际项目中,会到此频繁触发,如有接口会频繁的请求接口,除了会引起不必要的多次请求还会导致数据有问题.下面有二种方式来处理这个问题: 1 ...