Bean Mapping之Orika的项目运用

× 文章目录
  1. 1. orika-mapper快速高效映射框架
    1. 1.1. 为什么需要模型映射?
    2. 1.2. Orkia的设计思路
    3. 1.3. 在实际项目中使用如下:

前言 在JavaEE开发过程中,我们经常会把持久层的实体对象copy给VO,BO等,用于快速将持久层中的对象释放如下图所示。但很多时候BO,VO和Entity的结构都是类似的。刚开始通过写很多冗长的b.setF1(a.getF1())这样的代码来实现对象的Copy,后来逐渐延伸出Spring BeanUtils, CgLib BeanCopier, Apache BeanUtils, Dozer等快速实体映射工具jar。性能对比可以参考这篇文章:http://www.cnblogs.com/kaka/archive/2013/03/06/2945514.html

orika-mapper快速高效映射框架

为什么需要模型映射?

多次模型, 可以保证内部实体不被直接暴露, 也可使得接口层模型更为独立, 解耦实体层模型。Bean Mapping用于快速,高性能的对两个POJO对象做数据双向映射。

Orkia的设计思路

github:https://github.com/orika-mapper/orika
doc:http://orika-mapper.github.io/orika-docs/

Orika使用javaassist提前生成拷贝代码

优势:避免使用反射和多次读取映射规则,性能高内存消耗低

Orika 的设计思路就是预先通过javaassist 把Java Bean 之间的映射关系一次性生成目标拷贝方法代码。 这样就可以避免在Bean 映射环节一次次的读取映射规则。 这就是Orika 性能提升的原因。理论上以生成的目标Java 代码来运行映射是拷贝模式所能取到性能最大值的方法。

通过自定义注解的方式,Orika与Spring框架整合(在这里不描述是如何自定义整合使用),达到高性能的模型映射,支持无配置映射,支持复杂映射,支持自定义类型转换。

在实际项目中使用如下:

  1. 在applicationContext.xml文件中,配置Model的通配符扫描包路径
1
2
3
<bean id="orikaBeanMapper" class="com.xxxxx.xxxxx.core.beans.mapping.orika.OrikaBeanMapper">
<property name="basePackage" value="com.xxxxx.financing.model.**"></property>
</bean>
  1. 在需要copy的地方依赖注入
1
2
3
4
@Autowired
private BeanMapper beanMapper;
beanMapper.map(financingAccountModel, FinancingAccount.class)
  1. entity上注解配置如下,此处省略get set方法。
1
2
3
4
5
6
7
8
9
@MapClass(value="com.xxx.financing.database.model.FinancingAccountModel")
public class FinancingAccount {
private Long id;
private String userId;
private String userName;
}
如果您觉得文章不错,可以打赏我喝一杯咖啡!