【代码工具】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 ...
随机推荐
- SEM推广引流效果的因素有哪些呢?
决定搜索引擎推广效果的基本就是流量,所引流过来的是有效流量还是无效流量,直接决定了推广的效果!那我们如何才能引流到最精准的流量把流量变现呢? 第一个就是关键词的匹配模式 "民营企业" ...
- spring boot中读取配置文件的两种方式
application.properties test.name=测试 test.url=www.test.com 1.@Value注解 在controller里可以这样直接调用 @Value(&qu ...
- iOS 完全复制UIView
如果要完全复制一个UIView和对象的时候可以使用对象序列化方法 // Duplicate UIView - (UIView*)duplicate:(UIView*)view { NSData * t ...
- legend2---17、legend2里面怎么面向对象
legend2---17.legend2里面怎么面向对象 一.总结 一句话总结: mvc本身挺优:本身mvc的开发模式,就算是面向过程下也还行,如果面向对象那就更加棒了 实体类无需属性:由于php的生 ...
- java中 抽象类和接口的区别
一. 什么是抽象类及什么是抽象方法 抽象方法是一种特殊的方法:他只有声明,而没有具体实现,抽象方法的声明格式为: abstract void funName(); 抽象方法必须用 abstract 修 ...
- centos 安装 Lamp(Linux + Apache + PHP) 并安装 phpmyadmin
来源:http://www.laozhe.net/302.html 一般情况下,安装的都是最新的正式版,除非你有特殊需求,要安装指定的版本,本文暂不讨论.从最基础的开始,一点点完成一个可用的 Linu ...
- MySQL高级学习笔记(五):查询截取分析
文章目录 慢查询日志 是什么 怎么玩 说明 查看是否开启及如何开启 默认 开启 那么开启了慢查询日志后,什么样的SQL才会记录到慢查询日志里面呢? Case 配置版 日志分析工具mysqldumpsl ...
- java.lang.IllegalAccessException: Class XXXcan not access xxx with modifiers "private"
field 或者 method 是 provate的 field.setAccessible(true); method.setAccessible(true); 有时候是因为 newinstance ...
- idea sevlet连sqlserver失败解决
1 普通java程序连sqlserver失败解决办法:https://www.cnblogs.com/Demonfeatuing/p/9208514.html 出现javax.xml.bind.J ...
- JeeSite使用(一)大步跑起来
背景:近期准备换个工作,想对之前自己写的代码进行重构,选择了JeeSite 需求:跑起来才是硬道理 方法:1.官方文档有坑,别信他 2.官方文档有坑,别信他 3.官方文档有坑,别信他 一 ...