MapStruct

一、前言

       MapStruct是一个基于注解(jdk6 annotation processor, 例如 lombok)的代码生成框架,用于实现不同对象之间的映射。

二、使用样例

1.用于映射的样例

public class Customer {

    private Long id;
    private String name;

    //getters and setter omitted for brevity
}

public class CustomerDto {

    public Long id;
    public String customerName;
}

@Mapper
public interface CustomerMapper {

    CustomerMapper INSTANCE = Mappers.getMapper( CustomerMapper.class );

    @Mapping(source = "customerName", target = "name")
    Customer toCustomer(CustomerDto customerDto);

    @InheritInverseConfiguration
    CustomerDto fromCustomer(Customer customer);
}

2.使用转化器

@Service
public class CustomerService{
    @Resource
    private CustomerRepository repository;
    
    /**
    * 存储顾客
    */
    public void saveCustomer(CustomerDto dto){
        Customer customer =  CustomerMapper.INSTANCE.toCustomer(dto);
        repository.save(customer);
    }
}

三、高级扩展

1.请求驼峰处理器

a.实现自定义命名插件

将target的setter和getter方法与source的property对应

public class CustomCamelNamingStrategy extends DefaultAccessorNamingStrategy {


    @Override
    public String getPropertyName(ExecutableElement getterOrSetterMethod) {
        String methodName = getterOrSetterMethod.getSimpleName().toString();
        if (methodName.contains("-")){
            String fieldName = methodName.subString(3);
            char []chs = fieldName.toCharArray();
            chs[0] =  Character.toLowerCase(chs[0]);
            return toCamelName(new String(chs));
        }
        return super.getPropertyName(getterOrSetterMethod);
    }

    private String toCamelName(String fieldName){
        String res = "";
        char[] chs = fieldName.toCharArray();
        for (int i = 0; i < chs.length; i++){
            if(chs[i] == '_'){
                res += Character.toUpperCase(chs[++i]); 
                continue;
            }
            res+=chs[i];
        }
        return res;
    }
}

b.配置使用

java spi 配置

resources/META-INF.services/org.mapstruct.ap.spi.AccessorNamingStrategy

org.mapstruct.example.spi.CustomCamelNamingStrategy 

相关推荐

  1. MapStruct

    2023-12-17 17:22:03       39 阅读
  2. springboot mapstruct

    2023-12-17 17:22:03       35 阅读
  3. Spring Boot集成mapstruct快速入门指南

    2023-12-17 17:22:03       20 阅读
  4. 基础技术(MapStruct、SPI、TK-Mybatis)

    2023-12-17 17:22:03       16 阅读

最近更新

  1. TCP协议是安全的吗?

    2023-12-17 17:22:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2023-12-17 17:22:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2023-12-17 17:22:03       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2023-12-17 17:22:03       20 阅读

热门阅读

  1. 2312llvm,读写位码

    2023-12-17 17:22:03       43 阅读
  2. Using Implicit Rules

    2023-12-17 17:22:03       34 阅读
  3. WTN6040F-8S语音芯片:投篮游戏机新时代引领者

    2023-12-17 17:22:03       41 阅读
  4. macos苹果电脑开启tftp server上传fortigate60e固件成功

    2023-12-17 17:22:03       33 阅读
  5. 使用Yellowbrick绘制获取最佳聚类K值的示例

    2023-12-17 17:22:03       39 阅读
  6. 【vue filters 过滤器】vue页面 全局使用

    2023-12-17 17:22:03       38 阅读
  7. RK3568-PWM

    2023-12-17 17:22:03       38 阅读
  8. Optee在嵌入式系统中是否支持多线程机制

    2023-12-17 17:22:03       41 阅读
  9. Word Excel模版引擎

    2023-12-17 17:22:03       51 阅读