使用MapStruct.举个例子:

class Dto {

DtoA a;

DtoB b;

}

class DtoA {

Long id;

//...

}

class DtoB {

Long id;

//...

}

class Entity {

AB ab;

}

如何将DtoA和DtoB映射到AB?

我试过了:

public abstract Entity toEntity(Dto dto);

@Mappings({

@Mapping(source = "a", target = "ab.a"),

@Mapping(source = "b", target = "ab.b")

)}

public abstract AB toABEntity(DtoA a, DtoB b);

已生成Altough代码*,未调用方法toABEntity.

*糟糕的是,因为它首先设置“a”但是然后设置“b”会创建一个新的“ab”实例,因此“a”会丢失.

最佳答案 据我了解你想要将实体映射到Dto并将两个字段Dto.a和Dto.b组合到单个字段Entity.ab中.

通常当你尝试这样做时:

@Mapper

public interface TestMapper {

@Mappings({

@Mapping(source = "a.id", target = "ab.aId", qualifiedByName = "toAB"),

@Mapping(source = "b.id", target = "ab.bId", qualifiedByName = "toAB"),

})

Entity toEntity(Dto dto);

}

对于在ab内具有目标属性的每个@Mapping,生成的映射器覆盖ab实例.这显然是一个错误,并且在MapStructs GitHub上有一张票:https://github.com/mapstruct/mapstruct/issues/1148

但有一个解决方法:

@Mapper

public interface TestMapper {

@Mappings({

@Mapping(source = "dto", target = "ab", qualifiedByName = "toAB"),

})

Entity toEntity(Dto dto);

@Mappings({

@Mapping(target = "aId", source = "a.id"),

@Mapping(target = "bId", source = "b.id"),

})

AB toAB(Dto dto);

}

我认为AB类是:

class AB {

public Long aId;

public Long bId;

}

生成的映射器代码:

public class TestMapperImpl implements TestMapper {

@Override

public Entity toEntity(Dto dto) {

if ( dto == null ) {

return null;

}

Entity entity = new Entity();

entity.ab = toAB( dto );

return entity;

}

@Override

public AB toAB(Dto dto) {

if ( dto == null ) {

return null;

}

AB aB = new AB();

Long id = dtoBId( dto );

if ( id != null ) {

aB.bId = id;

}

Long id1 = dtoAId( dto );

if ( id1 != null ) {

aB.aId = id1;

}

return aB;

}

private Long dtoBId(Dto dto) {

if ( dto == null ) {

return null;

}

DtoB b = dto.b;

if ( b == null ) {

return null;

}

Long id = b.id;

if ( id == null ) {

return null;

}

return id;

}

private Long dtoAId(Dto dto) {

if ( dto == null ) {

return null;

}

DtoA a = dto.a;

if ( a == null ) {

return null;

}

Long id = a.id;

if ( id == null ) {

return null;

}

return id;

}

}

java dto 生成_java – 从多个源DTO映射到一个目标相关推荐

  1. Java随机生成Mac地址(GitHub源码下载)

    生成随机 Mac 地址 这段时间做项目,涉及到虚拟机 Mac 地址生成,网上找了一些 Java 随机生成 Mac 地址的代码,大多都是从 {'0', '1', '2', '3', '4', '5', ...

  2. java excel生成_java操作excel表,包括创建、读取、以及修改【via 度娘】

    作者的网站上对它的特征有如下描述: ● 支持Excel 95-2000的所有版本 ● 生成Excel 2000标准格式 ● 支持字体.数字.日期操作 ● 能够修饰单元格属性 ● 支持图像和图表 应该说 ...

  3. java 日志 生成_Java日志(转)

    日志对于一个系统来说非常重要,查找异常信息.分析系统运行情况等都需要用到日志.所以无论是JDK还是第三方都提供了关于日志的相关工具,本文分别介绍以下几种工具,以及各种工具间的整合.原理. JDK的ja ...

  4. java捕鱼达人_java捕鱼达人游戏(源码)

    [实例简介] java做的捕鱼游戏,有兴趣的小伙伴们可以看看了,源码非常详细. [实例截图] [核心代码] FishGame └── FishGame ├── bg │   ├── fishlight ...

  5. java 兑换码生成_java兑换码生成

    转自csin package com.test; import java.util.Random; public class RedeemCodeUtils { public static void ...

  6. java word生成_JAVA生成WORD工具类

    该方法借助freemarker的JAR包即可. 参考: 所需工具: 步骤: 1.在word中编辑好模版样式,设置好占位符,注意图片最好先黏上去 2.在word中,文件-另存为-XML格式 3.使用工具 ...

  7. asmx+java客户端生成_java 调用webservice (asmx) 客户端开发示例

    这是本人第一次写博客,其实就是自己做个笔记,写的很粗糙,也希望能给跟我遇到同样问题的你一点帮助. 因为最近有个项目要调用webservice接口,之前接触的都是Java开发服务端和客户端的接口,开发前 ...

  8. java bean生成_Java Bean 生成器

    这是一个java bean生成器,利用一个文本文件(不妨称为bean定义文件)生成java bean. 开发过程中我们可能会用到很多数据对象(值对象),大都被封装成一个bean.虽然各大 IDE都提供 ...

  9. java 兑换码生成_java生成兑换码礼包码--工具类

    importjava.util.HashSet;importjava.util.Random;importjava.util.Set;public classGenSerial {private st ...

  10. java酒店管理系统_java酒店管理系统(源码+数据库脚本)

    [实例简介]一个很基础的Java实例,实现最基础的增删改查 [实例截图] 账号:01101  密码:1234 [核心代码] package com.sqc.view; import java.awt. ...

最新文章

  1. 连表/子查询/计算的sql
  2. Bossy智能便贴:让工作更有效率
  3. 红帽RHEL6.8离线环境下升级到RHEL7.3
  4. Star 10.9K!这份Google面试攻略,牛逼了!
  5. 判断一个字符串是否是数值
  6. FreeSql (二十一)查询返回数据
  7. 博客系统。集成调试平台,支持类结构/jar结构预览、支持方法调试和监听、支持修改类字段(变量、常量、枚举)等
  8. xgboost的原理没你想像的那么难
  9. [SHELL进阶] (转)最牛B的 Linux Shell 命令 (三)
  10. Python 实用技巧
  11. 一款好看的 VSCode 代码主题和图标主题
  12. python实现ORC/文字识别之pytesseract
  13. 已会背诵英文文章 How To Boost Your Confidence
  14. 中国魔芋胶行业研究与投资前景预测报告(2022版)
  15. Linux 命令(159)—— hostname 命令
  16. CF1637E Best Pair
  17. HDU oj wod sticks
  18. C语言入门(前期准备工作)——超级详细的建议和教学,带你顺利跨越编程门槛
  19. Flutter33,Android移动开发基础
  20. sql server 2000安装程序配置服务器失败

热门文章

  1. 多个excel文件合并到一个文件中的多个sheet表中
  2. 近世代数:正规子群的同态与同构
  3. python中实现如何强制删除非空文件夹
  4. zoj 3332 Strange Country II
  5. B站手机缓存的视频在电脑上转换观看
  6. 雷电模拟器命令操作合集
  7. PhotoShop CS6 抠图教程
  8. c语言陈湘骥答案,c语言程序设计实验指导答案陈湘骥
  9. matlab 有限元法,基于Matlab语言的有限元法及其应用
  10. 记录一个去底色转换为透明图片的在线工具