基于dozer的beanMapper

dozer是一种javabean的映射工具,类似Apach的beanUtils。它可以进行简单的属性映射、复杂的属性映射、双向映射、递归映射等,并且可以通过xml配置文件进行灵活的配置。

表现层与应用层之间是通过数据传输对象(DTO)进行传输。数据传输对象存在的目的是对领域对象进行数据封装,实现层与层的数据传输。领域对象更注重领域,而数据传输对象更注重数据。简单来说,model是根据业务定义的,DTO是根据UI定义的。通过DTO可以实现表现层与model的解耦。

dozer可以实现model bean和DTO bean的相互转化。

dozer的使用:

添加pom依赖

<dependency>

<groupId>net.sf.dozer</groupId>

<artifactId>dozer</artifactId>

<version>5.5.1</version>

</dependency>

如果要映射两个属性名完全相同的对象,直接调用dozer的api(.map)即可,若是不同属性的两个对象,需要配置dozerBeanMappingFactory(整合spring的情况下),详情见https://blog.csdn.net/u010832551/article/details/74518902

beanMapper:

package com.yct.cms.utils;

import java.lang.reflect.Method;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.dozer.DozerBeanMapper;

import com.google.common.collect.Lists;
import com.google.common.collect.Maps;

/**
 * 简单封装Dozer, 实现深度转换Bean<->Bean的Mapper.实现:
 *  
 * 1. 持有Mapper的单例.
 * 2. 返回值类型转换.
 * 3. 批量转换Collection中的所有对象.
 * 4. 区分创建新的B对象与将对象A值复制到已存在的B对象两种函数.
 *
 */
public class BeanMapper {

    /**
     * 持有Dozer单例, 避免重复创建DozerMapper消耗资源.
     */
    private static DozerBeanMapper dozer = new DozerBeanMapper();

    /**
     * 基于Dozer转换对象的类型.
     * 将map转换成对象
     * @param source 资源数据
     * @param destinationClass 目标对象类型
     * @return
     */
    public static <T> T map(Object source, Class<T> destinationClass) {
        return dozer.map(source, destinationClass);
    }
    
    /**
     * 将对象转换成Map
     * @param obj
     * @return
     */
    public static Map<String, Object> beanToMap(Object obj) {
        Map<String, Object> hashMap = new HashMap<String, Object>();
        try {
            Class<?> c = obj.getClass();
            Method m[] = c.getDeclaredMethods();
            

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值