# mapstruct **Repository Path**: linx93/mapstruct ## Basic Information - **Project Name**: mapstruct - **Description**: mapstruct的用例代码,实体转换,po转vo等等等。。。。。。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 4 - **Forks**: 0 - **Created**: 2021-09-24 - **Last Updated**: 2024-04-08 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # mapstruct ## 介绍 - 首先申明,我不生产代码,我只是代码的搬运工,[mapstruct原项目地址](https://github.com/mapstruct) - mapstruct的使用是为了解决实体间的转换问题 - 网上随便一搜索你就知道mapstruct的好处,我就不多bibi了,下面直接上demo ## 使用说明 ### 我使用的版本 | 目标 | 版本 | | :---- | :---- | | java | 11 | | IDEA | 2020.1 | | maven | 3.8.1 | ### 引入mapstruct项目依赖 ``` UTF-8 11 11 1.5.0.Beta1 1.18.20 0.2.0 org.projectlombok lombok ${org.projectlombok.version} provided org.mapstruct mapstruct ${org.mapstruct.version} org.apache.maven.plugins maven-compiler-plugin 3.8.1 11 11 org.projectlombok lombok ${org.projectlombok.version} org.mapstruct mapstruct-processor ${org.mapstruct.version} ``` ### mapstruct用例 ``` package com.example.mapstruct.converter; import com.example.mapstruct.entity.dto.Department; import com.example.mapstruct.entity.dto.Employee; import com.example.mapstruct.entity.dto.GoodDTO; import com.example.mapstruct.entity.po.GoodCategoryPO; import com.example.mapstruct.entity.po.GoodPO; import com.example.mapstruct.entity.vo.GoodVO; import org.mapstruct.*; import org.mapstruct.factory.Mappers; import javax.xml.crypto.Data; import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; /** * @description: good的转换 * @author: linx * @create: 2021-09-22 15:20 */ //componentModel设置为spring是为了符合spring的编程风格,可以直接通过@Autowired注入方式使用 @Mapper(componentModel = "spring") public interface GoodConverter { GoodConverter goodConverter = Mappers.getMapper(GoodConverter.class); @Mappings({ @Mapping(source = "goodId", target = "id"), @Mapping(source = "goodName", target = "name"), @Mapping(source = "goodStock", target = "stock"), // @Mapping(source = "category", target = "category") 字段相同的可以不写映射关系也能映射 @Mapping(target = "status", ignore = true) }) GoodVO goodDTO2GoodVO(GoodDTO goodDTO); @InheritInverseConfiguration GoodDTO goodVO2GoodDTO(GoodVO goodVO); List goodDTO2GoodVO(List list); @InheritInverseConfiguration List goodVO2GoodDTO(List list); @Mappings({ @Mapping(source = "goodPO.goodId", target = "id"), @Mapping(source = "goodPO.goodName", target = "name"), @Mapping(source = "goodPO.goodStock", target = "stock"), @Mapping(source = "goodPO.goodStatus", target = "status", qualifiedByName = "converterStatus"), @Mapping(source = "goodCategoryPO.category", target = "category") }) GoodVO goodPOAndGoodCategoryPO2GoodVO(GoodCategoryPO goodCategoryPO, GoodPO goodPO); /** * 自定义status从int转boolean的逻辑 * * @param status * @return */ @Named("converterStatus") default Boolean converterStatus(Integer status) { return status == 1; } /** * Map to Bean * * @param map * @return */ @Mapping(target = "department", ignore = true) Employee fromMap(Map map); @AfterMapping default void finishEmployee(@MappingTarget Employee employee, Map map) { employee.setDepartment(fromMapToDepartment(map)); } @Mapping(target = "id", source = "did") @Mapping(target = "name", source = "dname") Department fromMapToDepartment(Map map); @MapMapping( valueDateFormat = "yyyy-MM-dd" ) Map toMap(Map dateMap); } ``` ### 补充 - 测试代码在test下