MapStruct 1.2.0 参考指南

所需积分/C币:40 2018-07-12 18:31:45 1.34MB PDF
收藏 收藏
举报

MapStruct是一个代码生成器的工具类,简化了不同的Java Bean之间映射的处理,所以映射指的就是从一个实体变化成一个实体。(带目录标签)
与手写映射代码相比, Mapstruct通过生成繁琐且容易岀错的代码来节省时间。遵循约定而不是配置方法, MapStruct使用合理的默认值, 但在配置或实现特殊行为时不会采取任何步骤。 与动态映射框榘相比, Mapstruct具有以卜优点 通过使用旾通方法调用而不是反射来快速执行 ·编译时类型安仝性:只能映射彼此的对象和属性,不能将订单实体意外映射到客户DTO等 在构建时清除锖误报告,如果 ¤映射不完整(并非所有目标属性都被映射) 映射不正确(无法找到适当的映射方法或类型转换) 2设置 MapStruct是基于SR269tp:/ wwcp. org/en/jsr/detail?id=269)的Java注释处理器,因此可以在命令行构建中使用( Javac,Ant, Maven 等),也可以在IDE中位用。 它包含以下工件: org. mapstruct: mapstruct:包含所需的注释,如@ Mapping;在ava8或更高版木中,使用 org. mapstruct: napstruc-jdk8代替它, 它利用了ava8中引入的语言改进 · org. mapstruct: mapstruct-processor:包含生成映射器实现的注释处理器 2.1。 Apache Maven 对于基于 Maven的项目,将以下内容添加到您的POM文件中以使用 Mapstruct 示剑. Maven配置 2 <proper ties> org. mapstruct version>1.2.0. Final</org. mapstruct version> 4 </properties> <groupId>org. mapstruct </groupId> jdk</artif <version>scrg. mapstruct version/</version> </dependency> 15 ≤ group lugins≤/ sartifactId>maven-compiler-plugin</artifactId> <version>3.5.1</version> .contiguration> source>1.8</source> t>1.8</target <annotation ProcessorPaths> <groupIdsorg mapstruct</group Id> cartifactId>mapstruct-processor</artifactId <version>s[org. mapstruct version]</version> 2 </annotation Processor paths> </configuration 3 </p⊥ gins 如果您止在使用EclipseID,清确保捐有当前版本的M2捕件(htp:/www.eclipse.org/m2e)。当导入一个如上所示配置的 Maven项目时,只要保存一个映射器类型,它就会设置 Mapstruct注释处理器,使其在DE中正确运行。整洁,不是吗? 要仔细检査一切是否按预期工作,请转至项日属性并选择ava编译器”一“注释处理”亠“工厂路径”。 Mapstruct处理器JAR 应在此处列出并启用。任何通过编译器插件配置的处理器选项(参见下文)都应列在ava编译器”“注释处理”下。 如果处理器没有启动,请检查是否启用了通过M2E配置注释处理器。为此,请转到“首选项”→“ Maven”→“批注处理”并选 择“自动配置 JT APT"。或者,在 properties您的POM文件部分指定以下内容 12e. apt activation>idt_apt</m2eaptactivatio 还要确保您的项日使用Java1.6或更高版本(项日属性→“Java编译器”-“编译合规性级别”)。它不适用于旧版本」 2.2。 Gradle 将以下内容添加到您的 gradle构建文件中以启用 MapStruct: 小她. gradle配 d 'net ltgt apt version 0.8 6 dependenc ies t compile 'org. mapstruct: mapstruct-jdk8: 1.2.0. Final pt org. maps truct: mapstruct-processor: 1.2.0. Final 11 您可以在GitHub上的mapstruct-examples(https://github.com/mapstruct/mapstruct-examples/tree/master/mapstruct-on-gradle项目中找到完整 的示例 23。 Apache Ant 将」 Javac如下配置的任务添加到您的 build xml文件中,以便在基于Ant的顶目中启用 MapStruct。根据项目布局的需要调整路径 例3.Ant配置 srcdir="src/main/java destdir-"target/classes asspath=path/to/mapsIruct-jdk8-120. Final. jar"> <compilerarg l ine="-prucessorpath path/1o/maps l ruc I-pr ocessor-120.Final. jar"/> <compilerarg line="-s target/gener ated-sources"/> avac> 您可以在GHub上的mapstruct-examples(https:/lgithub:on/mapstruct/napstruct-exaImples/tree/master/mapstruct-on-ant项目中找到完整的 例 24。配置选项 Mapstruct代码生成器可以使用注释处理解选项进行配置。 当直接调用 Javac时,这些选项以-Akey=wle.形式传递给编译器。当通过 Maven使用 MapStructl时,可以使用 options Maven处理器 插件配置中的元素传递任何处理器选项,如下所示 例4. Maven配置 <groupId>org. apache maven plugins</group Id> artifactId>maven-compiler-plugin</artifactId <on「 i gur al ion> <source>1. 8</ source <annotationProcessor paths> 11 <grcupld>org. mapstruct</groupId> cartifactld>mapstruct-processorc/artifactld <version>Sorg. mapstruct, version]</version> 14 </annotation ProcessorPaths> <compilerargs <CoI) Amlapstruc t suppr essGener alor T i mes t amp=true ileaL 20 <compilerArg> -Amapstruct, suppressGeneratorversionInfocomment=true </compllerArg> 23 </compilerArgs 24 </configuration> 示例5 gradle配置 2 compileJava i 3 options. compilerArgs - Amaps truct. suppressGener alar T I anp=true 5 Amapstruct. suppressGener ator versionInfoComment=true 以下选项存在: 表1. MapStruct处理器逝 选项 目的 默认 选项 日的 默认 struc t 如果设置为true,@Ger d则会在生成的映射器类的fal suppress GeneratorTime stamp 注释中创建时间戳。 napstruct 如果设置为true,则会在生成的映射器类中注释中的 false suppressGeneratorVersionInfoCommentcomment属性创建 @Generated被抑制。该注释包含有关 MapStruct,扳本和用丁注释处理的编译器的信息 apstruct. defaultComponentModel 根据生成映射器的组件模型的名称(请参阅检索映射器) default 支持的值是 · default:映射器不使用组件模型,通常通过实例检索 实例 Mappers# getmapper(C1a55) di:生成的呋射器是一个应用程序范围的 CDi bean, 以通过检索 @inject g:生成的映射器是一个单一范围的 Spring 可以通过检索@ Autowired jsr330:牛成的映射器使用{@code@ Named}行注 释,并且可以通过@ nect使用 Spring进行检索 如果为特定的呋射器通过组件模型 entMode1(),则注释中釣值优先 选项 日的 默认 mapstruct. unmappedTargetPolicy 在映射方法的目标对象的属性未填充源值的情况下应用的默ARN 认报告策略。 支持的值是 ERROR:任何未映射的日标属性莓将导致映射代码生成 失败 MARN:任何未映射的日标属性将在构建时引发警告 IGNORE:末映射的目标属性被忽略 如果为特定的呋射器通过了策略 @ Mapper# unmappedTargetPo1icy(),则注释中的值优 先 2.5。在ava9上使用 AbsTruct MapStruct可以与Java9起使用,但由 J Javal版本尚末完成,因此对它的支持是实验性的 java9的核心主题是jDK约模块化。其中一个影响是需要为项目启用特定模块才能使用 Javax.aη potatoη. Generated注释 @ Generated由 Mapstruct添加到生成的映射器类中,将它们标记为牛成的代码,说明生成日期和生成器版本等。 为了允许使用@Generated注释,公须启用模块ava.annotations.common。使用Maven时,可以这样做: 导出 MAVEN OPTS=“ add-modules java, annotations. common 如果@ Generated注解不可用, Mapstruct将检测到这种情况,而不是将其添加到生成的映射器中。 3定义一个映射器 左本节屮,您将学习如何使用 Mapstruct定义bean映射器以及您必须执行哪些选项 3.1。基本映射 要创建映射器,只需位用所需的映射方法定义一个ava接口并使用注释对其进行org. mapstruct. Mapper注释 例子6. Maven原置 pper 2 public interface CarMapper i @Mappings(i Mapping(source -"make", target -"manufacturer") @Mapping(source ="number orSeats", lar get ="sea.Caunt") CarDto car TocarDto(Car car @Mapping( source ="name, target ="fullName") Per sonDto per son I oPersonDto(Person person) 亥@ Mapper注释将使得 MapStruct代码生成器创建的执行 CarMapper过程中生成时的界面 在生成的方法实现屮,源炎型(例如Car)屮的所有可读属性都将被复訇到目标类型(例如 Cardto)屮的相应属性屮。如果属性在目标实 体中具有不同的名弥,则可以通过@ Mapping注释指定其名称 Javabeans规中htp:/www.oracle.com/technetwork/avajavase/documentationjspec-13600htm定义的属性名称必须在 @ Mapping注释中指定,例如,具有访问器方法和属性的属性的 seatcount。 getseatcount() setseat count() 史用Java8或更高版木时,可以省略@ Mappings包装器注释并直接@ Mapping在一个方法上指定几个注释。 为了更好地理解 MapStruct的功能 cartocardto(),请看 MapStruct生成的以下方法实现 示例7的 Mapstruct生成的代码 / GENERATED CODE 2 public class CarMapperImpl implements Car Mapper i public CarDto car To CarDto(Car car )t if( car ==null)i return null 10 CarDtocardto new CarDto if car get Features(!=null) carDto. setFeatures( new ArrayList<string>( car. getFeatures())) car Dto. setManufacturer( car. getMake()) 16 car Dto. setSeatCount( car. getNumberof Seats()) car DLO se l Dr i ver( personToPer sonDLo( car.getDriver())) car Dto. setPrice( String valueof( car. getPrice())) if( car get Category () 11) carDto. setcategory( car. getcategory(). tostring()) carDto, setEngine( engine I toEngineDto( car. getEngine()))i 23 return cardto 26 public Per sonDto per sunToPersonDto(Per son person)i 2 3 private EngineDto engine IcEngineDto(Engine engine)t if engine 11) 36 Enginedto engineDto new Engine dto() 39 eng i neDLO se I Har sePower (eng ine. getHorsePower()) engineDto set Fuel(engine. getFuel() return engineDto: 3 MapStruct的一般理念是生成尽可能多的代码,就好像你自己亲自写了一样。特别是这意味着通过简单的 getter/ setter调用而不是反射或类 似的方式将值从源复制到日标 如示例所示,生成的代码考虑了通过指定的任何名称映射@ Mapping。如果源和目标实体中映射属性的类型不同,则 Abstruct应用自动 转换(例如,对于 price属性,另请参阅隐式类型转换),或者可选地调用心」建另一个映射方法(例如,对于錾动程序/动鍫性,另见映 射对象引用)。当且仅当源和目标属性是Bean的属性并且它们本身是Bean或简单属性时, MapStruct才会创建新的映射方法。即他们不是

...展开详情
试读 59P MapStruct 1.2.0 参考指南
立即下载 低至0.43元/次 身份认证VIP会员低至7折
    抢沙发
    一个资源只可评论一次,评论内容不能少于5个字
    • 分享达人

      成功上传6个资源即可获取
    关注 私信 TA的资源
    上传资源赚积分,得勋章
    最新推荐
    MapStruct 1.2.0 参考指南 40积分/C币 立即下载
    1/59
    MapStruct 1.2.0 参考指南第1页
    MapStruct 1.2.0 参考指南第2页
    MapStruct 1.2.0 参考指南第3页
    MapStruct 1.2.0 参考指南第4页
    MapStruct 1.2.0 参考指南第5页
    MapStruct 1.2.0 参考指南第6页
    MapStruct 1.2.0 参考指南第7页
    MapStruct 1.2.0 参考指南第8页
    MapStruct 1.2.0 参考指南第9页
    MapStruct 1.2.0 参考指南第10页
    MapStruct 1.2.0 参考指南第11页
    MapStruct 1.2.0 参考指南第12页
    MapStruct 1.2.0 参考指南第13页
    MapStruct 1.2.0 参考指南第14页
    MapStruct 1.2.0 参考指南第15页
    MapStruct 1.2.0 参考指南第16页
    MapStruct 1.2.0 参考指南第17页
    MapStruct 1.2.0 参考指南第18页

    试读已结束,剩余41页未读...

    40积分/C币 立即下载 >