三步走使用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
作者:ukyo--碳水化合物
出处:https://www.cnblogs.com/ukzq/p/12313016.html
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 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 一个空指针