您当前的位置: 首页 >  spring

培根芝士

暂无认证

  • 1浏览

    0关注

    446博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

SpringBoot使用dozer

培根芝士 发布时间:2022-03-29 16:02:00 ,浏览量:1

Dozer是Java Bean到Java Bean映射器,它以递归方式将数据从一个对象复制到另一个对象。通常,这些Java Bean将具有不同的复杂类型。

Dozer支持简单属性映射,复杂类型映射,双向映射,隐式显式映射以及递归映射。这包括映射还需要在元素级别进行映射的集合属性。

1、导入依赖

    net.sf.dozer
    dozer-spring
    5.5.1



    net.sf.dozer
    dozer
    5.5.1
2、添加配置
@Configuration
public class DozerMapperConfig {
    @Bean
    public DozerBeanMapperFactoryBean dozerBeanMapperFactoryBean(@Value("classpath*:dozer/*.xml" ) Resource[] resources) throws Exception {
        final DozerBeanMapperFactoryBean dozerBeanMapperFactoryBean = new DozerBeanMapperFactoryBean();
        dozerBeanMapperFactoryBean.setMappingFiles(resources);
        return dozerBeanMapperFactoryBean;
    }
}

3、在resources下的dozer目录创建xml

bean-mappings.xml




global-configuration.xml



    
        yyyy-MM-dd HH:mm:ss
        true
        false
    

4、工具类

接口

public interface IGenerator {

    /**
     * @param s   数据对象
     * @param clz 复制目标类型
     * @return {@link T}
     * @Description: 单个对象的深度复制及类型转换,vo/domain , po
     */
     T convert(S s, Class clz);

    /**
     * @param s   数据对象
     * @param clz 复制目标类型
     * @return {@link List}
     * @Description: list深度复制
     */
     List convert(List s, Class clz);

    /**
     * @param s   数据对象
     * @param clz 复制目标类型
     * @return {@link Set}
     * @Description: set深度复制
     */
     Set convert(Set s, Class clz);

    /**
     * @param s   数据对象
     * @param clz 复制目标类型
     * @return {@link T[]}
     * @Description: 数组深度复制
     */
     T[] convert(S[] s, Class clz);
}

实现

@Component
public class EJBGenerator implements IGenerator {

    @Autowired
    protected Mapper dozerMapper;

    @Override
    public  T convert(final S s, Class clz) {
        return s == null ? null : this.dozerMapper.map(s, clz);
    }

    @Override
    public  List convert(List s, Class clz) {
        return s == null ? null : s.stream().map(vs -> this.dozerMapper.map(vs, clz)).collect(Collectors.toList());
    }

    @Override
    public  Set convert(Set s, Class clz) {
        return s == null ? null : s.stream().map(vs -> this.dozerMapper.map(vs, clz)).collect(Collectors.toSet());
    }

    @Override
    public  T[] convert(S[] s, Class clz) {
        if (s == null) {
            return null;
        }
        @SuppressWarnings("unchecked")
        T[] arr = (T[]) Array.newInstance(clz, s.length);
        for (int i = 0; i < s.length; i++) {
            arr[i] = this.dozerMapper.map(s[i], clz);
        }
        return arr;
    }
}
5、调用示例
@Autowired
private IGenerator generator;

public UserOutputDTO getUserByName (User user) {
    UserOutputDTO outputDto = generator.convert(user, UserOutputDTO.class);
    return outputDto;
}

关注
打赏
1660824269
查看更多评论
立即登录/注册

微信扫码登录

0.0365s