一、 简介
mapstruct 是一个对象之间 属性值映射的工具,功能很丰富,能够满足大部分的数据赋值需求。
二、 使用
1. 先准备一个类
package com.management.dto.organization;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
import java.util.List;
@Data
@ApiModel("机构树")
public class OrgTreeDto {
/**
* 主键
*/
@ApiModelProperty("主键")
private String id;
/**
* 上级部门Id
*/
@ApiModelProperty("上级部门Id")
private String parentId;
/**
* 部门编号
*/
@ApiModelProperty("部门编号")
private String code;
/**
* 部门名称
*/
@ApiModelProperty("部门名称")
private String title;
/**
* 部门等级
*/
@ApiModelProperty("部门等级")
private int levelCode;
/**
* 创建时间
*/
@ApiModelProperty("创建时间")
private Date createdAt;
/**
* 创建操作人
*/
@ApiModelProperty("创建操作人")
private String createdById;
/**
* 是否删除
*/
@ApiModelProperty("是否删除")
private boolean deleted;
/**
* 子级机构
*/
@ApiModelProperty("子级机构")
private List<OrgTreeDto> children;
/**
* 前端要加的
*/
private boolean contextmenu ;
}
2. 新建一个接口
package com.management.common.mapstruct;
import com.management.dto.organization.OrgTreeDto;
import com.management.entity.Organization;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import java.util.List;
@Mapper(componentModel = "spring")
public interface OrgCovert {
@Mapping(source = "name" , target = "title")
OrgTreeDto daoTodto(Organization organization);
List<OrgTreeDto> daoTodto(List<Organization> organizationList);
}
三、 测试
1. 在controller 新建一个web接口
@Autowired
private OrgCovert orgCovert;
@ApiOperation(value = "测试数据映射")
@GetMapping("/generateData")
@ResponseBody
public ServiceApiResult<String> generateData() {
try {
Organization organization1 = new Organization();
organization1.setName("1");
Organization organization2 = new Organization();
organization1.setName("2");
Organization organization3 = new Organization();
organization1.setName("3");
Organization organization4 = new Organization();
organization1.setName("4");
List<Organization> organizationList = new ArrayList<>();
organizationList.add(organization1);
organizationList.add(organization2);
organizationList.add(organization3);
organizationList.add(organization4);
OrgTreeDto dto = orgCovert.daoTodto(organization1);
log.info("[测试数据映射]-dto:{}", JSONUtil.toJsonStr(dto));
List<OrgTreeDto> dtoList = orgCovert.daoTodto(organizationList);
log.info("[测试数据映射]-dtoList:{}", JSONUtil.toJsonStr(dtoList));
return ServiceApiResult.success("true");
} catch (Exception e) {
e.printStackTrace();
return ServiceApiResult.error(e.getMessage());
}
}
2. 运行结果如下
2021-10-13 11:37:21.241 INFO 114568 --- [nio-8327-exec-8] c.m.controller.OrganizationController : [测试数据映射]-dto:{"levelCode":0,"deleted":false,"contextmenu":false,"title":"4"}
2021-10-13 11:37:21.243 INFO 114568 --- [nio-8327-exec-8] c.m.controller.OrganizationController : [测试数据映射]-dtoList:[{"levelCode":0,"deleted":false,"contextmenu":false,"title":"4"},{"levelCode":0,"deleted":false,"contextmenu":false},{"levelCode":0,"deleted":false,"contextmenu":false},{"levelCode":0,"deleted":false,"contextmenu":false}]
3 . 自带构建的实现类
package com.managementcommon.mapstruct;
import com.base.infrastructure.dto.organization.OrgTreeDto;
import com.base.infrastructure.entity.Organization;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.Generated;
import org.springframework.stereotype.Component;
@Generated(
value = "org.mapstruct.ap.MappingProcessor",
date = "2021-10-13T09:35:10+0800",
comments = "version: 1.2.0.Final, compiler: javac, environment: Java 1.8.0_251 (Oracle Corporation)"
)
@Component
public class OrgCovertImpl implements OrgCovert {
@Override
public OrgTreeDto daoTodto(Organization organization) {
if ( organization == null ) {
return null;
}
OrgTreeDto orgTreeDto = new OrgTreeDto();
orgTreeDto.setTitle( organization.getName() );
orgTreeDto.setId( organization.getId() );
orgTreeDto.setParentId( organization.getParentId() );
orgTreeDto.setCode( organization.getCode() );
orgTreeDto.setLevelCode( organization.getLevelCode() );
orgTreeDto.setCreatedAt( organization.getCreatedAt() );
orgTreeDto.setCreatedById( organization.getCreatedById() );
orgTreeDto.setDeleted( organization.getDeleted() );
return orgTreeDto;
}
@Override
public List<OrgTreeDto> daoTodto(List<Organization> organizationList) {
if ( organizationList == null ) {
return null;
}
List<OrgTreeDto> list = new ArrayList<OrgTreeDto>( organizationList.size() );
for ( Organization organization : organizationList ) {
list.add( daoTodto( organization ) );
}
return list;
}
}