mapstruct在当前轻量级框架开发中的重点使用,@Named注解使用示例,@AfterMapping与@BeforeMapping注解的详细常见用法,在转换DTO时,与过去常用的beanUtil转换有高性能的转换优势,编译期自动生成的mapper实现类能够更加优雅的来实现各种隐式类型转换,以实现快速而又敏捷的开发,告别臃肿的手动get、set与类型的强转
引入依赖:
<lombok.version>1.18.26</lombok.version><mapstruct.version>1.4.2.Final</mapstruct.version>
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct</artifactId>
<version>${mapstruct.version}</version>
</dependency>
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>${mapstruct.version}</version>
</dependency>
加入插件
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>8</source>
<target>8</target>
<showWarnings>true</showWarnings>
<annotationProcessorPaths>
<path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
</path>
<path>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>${mapstruct.version}</version>
</path>
</annotationProcessorPaths>
<compilerArgs>
<compilerArg>-Amapstruct.unmappedTargetPolicy=IGNORE</compilerArg>
</compilerArgs>
</configuration>
</plugin>
</plugins>
</build>
示例代码:
import com.cloudwise.douc.dto.DubboRoleUserPageReq;
import com.cloudwise.douc.dto.DubboRpcQueryParam;
import com.cloudwise.douc.dto.DubboUserDepartmentReq;
import com.cloudwise.knowledge.commons.bean.vo.douc.user.*;
import com.cloudwise.knowledge.commons.bean.vo.douc.vo.user.req.UserAliasReqVo;
import com.cloudwise.knowledge.commons.bean.vo.douc.vo.user.req.UserReqVo;
import com.cloudwise.knowledge.commons.bean.vo.douc.vo.user.resp.*;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.Mappings;
import org.mapstruct.factory.Mappers;
import java.util.List;
@Mapper
public interface UserConverter {
UserConverter INSTANCE = Mappers.getMapper(UserConverter.class);
/**
* vo请求参数装换为dubbo-api的参数类型
*/
DubboUserDepartmentReq toDubboUserDepartment(UserReqVo userVo);
@Mappings({
@Mapping(source = "userName",target = "nameOrAlias" )
})
DubboRpcQueryParam toDubboRpcQueryParam(UserReqVo userVo);
DubboRoleUserPageReq toDubboRoleUserPage(UserReqVo userVo);
DubboRpcQueryParam toDubboRpcQueryParam(UserAliasReqVo userVo);
/**
* 用户分页数据装换
*/
UserDeptPageRespVo userPageToResp(UserPage userPage);
/**
* entity to vo
*/
@Mappings({
@Mapping(source = "userId",target = "id" )
})
UserDeptRespVo userInfoToDeptResp (UserInfo userInfo);
List<UserDeptRespVo> userInfoToDeptRespList (List<UserInfo> userInfo);
/**
* 用户组层级信息
* */
UserGroupLevelRespVo userDeatilTogroupLevel(UserDetail userDetail);
List<UserGroupLevelRespVo> userDeatilTogroupLevelList(List<UserDetail> userDetails);
UserGroupLevelPageRespVo userDetailPageToResp(UserDetailPage userDetailPage);
/**
* 用户所有角色信息
*/
UserRoleRespVo userRoleToResp(UserRoleInfo userRoleInfo);
List<UserRoleRespVo> userRoleToRespList(List<UserRoleInfo> userRoleInfos);
}