zoukankan      html  css  js  c++  java
  • 3.2Adding custom methods to mappers(在映射器中添加自定义方法)

    3.2Adding custom methods to mappers(在映射器中添加自定义方法)

    有些情况下,我们需要实现一些MapStruct无法直接自动生成的复杂类型间映射。一种方式是复用其他已实现的映射。或者,在使用java8或者更高版本的时候,可以直接在映射器接口中实现自定义方法作为默认方法,如果参数和返回类型匹配, 生成的代码将调用默认方法。

    举个例子,加入我们要把Person映射成PersonDto,因为涉及到一些特殊的逻辑,MapStruct无法直接将映射代码生成,您可以从前面的示例中定义映射器, 如下所示:

    Example 8. Mapper which defines a custom mapping with a default method

    @Mapper
    public interface CarMapper {
    
        @Mappings({...})
        CarDto carToCarDto(Car car);
    
        default PersonDto personToPersonDto(Person person) {
            //hand-written mapping logic
        }
    }
    

    由 MapStruct 生成的实现方法 carToCarDto (),在映射【司机】属性时, carToCarDto () 中生成的代码将调用手动实现的 personToPersonDto () 方法。

    映射程序还可以以抽象类的形式而不是接口来定义, 并直接在该映射器类中实现自定义方法。在这种情况下, MapStruct 将生成具有所有抽象方法实现的抽象类的扩展。此方法在声明默认方法方面的优点是可以在映射器类中声明其他字段。

    前面的示例中, 从Person到 PersonDto 的映射需要一些特殊的逻辑, 同样可以这样定义:

    Example 9. Mapper defined by an abstract class

    @Mapper
    public abstract class CarMapper {
    
        @Mappings(...)
        public abstract CarDto carToCarDto(Car car);
    
        public PersonDto personToPersonDto(Person person) {
            //hand-written mapping logic
        }
    }
    

    MapStruct 将生成 CarMapper 的子类, 并在声明为抽象的情况下实现 carToCarDto () 方法。在映射【司机】属性时, carToCarDto () 中生成的代码将调用手动实现的 personToPersonDto () 方法。

  • 相关阅读:
    Lua如何管理”package”
    Lua: 好的, 坏的, 和坑爹的
    Lua中metatable和__index的联系
    Lua5.3 注册表 _G _ENV
    采访 Lua 发明人的一篇文章
    Lua的函数调用和协程中,栈的变化情况
    理解 Lua 的那些坑爹特性
    高性能 Lua 技巧(译)
    LLVM每日谈21 一些编译器和LLVM/Clang代码
    上Https 和 http 差分
  • 原文地址:https://www.cnblogs.com/wzk1992/p/9196592.html
Copyright © 2011-2022 走看看