三步走使用Dozer (Do,Po,Vo转换工具)

第一步 把依赖加上

<dependency>
    <groupId>com.github.dozermapper</groupId>
    <artifactId>dozer-core</artifactId>
    <version>6.5.0</version>
</dependency>

第二步,不同属性名的在被转换bean上(Do)注解@Mapping("vo里该字段名称")

 

 

第三步,使用dozer进行转换

 

 

 


测试结果:

user:User(id=3, yonghumingcheng=zhangsan, password=123123, truename=truename1, bumenmingcheng=bumen, gangweijuese=null, beizhu=null, salt=null, root=null, roles=role1,role2,role3, createtime=Sat Feb 15 17:59:10 CST 2020, updatetime=null, p_id=1, state=null, icon=null, sort=null, order=null)
userVo:UserVo(id=3, username=zhangsan, password=123123, truename=truename1, bumenmingcheng=bumen, gangweijuese=null, beizhu=null, salt=null, root=null, roles=role1,role2,role3)

转换耗时

0.033 秒

 

list转换:

整体工具类:

复制代码
package com.xunxiao.common.utils;

import com.github.dozermapper.core.DozerBeanMapperBuilder;
import com.github.dozermapper.core.Mapper;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;

/**
 * dozer 转换器
 * @author zq
 */
@Component
public class GeneralConvertor {

    //持有Dozer单例, 避免重复创建DozerMapper消耗资源.
    @Resource
    public static final Mapper mapper = DozerBeanMapperBuilder.buildDefault();

    /**
     * List  实体类 转换器
     *
     * @param source 原数据
     * @param clz    转换类型
     * @param <T>
     * @param <S>
     * @return
     */
    public <T, S> List<T> convertor(List<S> source, Class<T> clz) {
        if (source == null) return null;
        List<T> map = new ArrayList<>();
        for (S s : source) {
            map.add(mapper.map(s, clz));
        }
        return map;
    }

    /**
     * Set 实体类 深度转换器
     *
     * @param source 原数据
     * @param clz    目标对象
     * @param <T>
     * @param <S>
     * @return
     */
    public <T, S> Set<T> convertor(Set<S> source, Class<T> clz) {
        if (source == null) return null;
        Set<T> set = new TreeSet<>();
        for (S s : source) {
            set.add(mapper.map(s, clz));
        }
        return set;
    }

    /**
     * 实体类 深度转换器
     *
     * @param source
     * @param clz
     * @param <T>
     * @param <S>
     * @return
     */
    public <T, S> T convertor(S source, Class<T> clz) {
        if (source == null) return null;
        return mapper.map(source, clz);
    }

    public void convertor(Object source, Object object) {
        mapper.map(source, object);
    }

    public <T> void copyConvertor(T source, Object object) {
        mapper.map(source, object);
    }


}
复制代码

示例:

        List<InterxxxxxxxxxxxxxtItemDo> interestDoList = intxxxxxxxxxxxxxntItemService.getInterexxxxxxxxxst(ixxxxxxxxntItemPage.getIxxxxxxxd());
        List<InterxxxxxxxxxxxxxmVo> resultVoList = null;
        //Do列表不为null,进行Do->Vo转换
        if(interestDoList!=null){
            resultVoList = this.convertor.convertor(interestDoList, InterestContentItemVo.class);
        }else{
            return CommonPage.failed("xxxxxxxxxx");
        }

 

轮子官方

https://github.com/DozerMapper/dozer

 

posted @   ukyo--碳水化合物  阅读(4238)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
历史上的今天:
2019-02-15 [nginx] - 使用nginx实现反向代理,动静分离,负载均衡,session共享
2019-02-15 一个空指针
主题色彩
花开如火,也如寂寞。
点击右上角即可分享
微信分享提示