属性复制神器——MapStruct

背景

​ 解决不同属性名称的不同实体类的属性复制问题

Maven 属性依赖



<dependency>
    <groupId>org.projectlombokgroupId>
    <artifactId>lombokartifactId>
    <version>1.16.16version>
dependency>

<dependency>
    <groupId>org.mapstructgroupId>
    <artifactId>mapstructartifactId>
    <version>1.4.2.Finalversion>
dependency>
<dependency>
    <groupId>org.mapstructgroupId>
    <artifactId>mapstruct-processorartifactId>
    <version>1.4.2.Finalversion>
dependency>

List集合复制示例

测试类UserTest


import lombok.Data;

@Data
public class UserTest {

    private Integer userId;
    
    private String userName;
}

目标类UserCover


import lombok.Data;

@Data
public class UserCover {

    private Integer id;

    private String name;
}

属性复制接口



import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.Mappings;
import java.util.List;

@Component
@Mapper(componentModel = "spring")
public interface UserCoverBasic {

    @Mappings({
        @Mapping(target = "name",source = "userName"),
        @Mapping(target = "id",source = "userId")
    })
    UserCover userToCover(UserTest userTest);
    List<UserCover> userToCoverList (List<UserTest> userTests);
    
}

测试接口


import com.cabbage.config.CabbageLog;
import com.dm.config.DmProperties;
import com.dm.service.DmService;
import com.pm.core.base.BaseResult;
import com.pm.core.base.BaseService;
import com.pm.core.mapstruct.UserCover;
import com.pm.core.mapstruct.UserCoverBasic;
import com.pm.core.mapstruct.UserTest;
import com.pm.core.websocket.WebSocketServer;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.List;

@Slf4j
@RestController
@RequestMapping("/test")
public class TestController extends BaseService {

    @Autowired
    private UserCoverBasic userCoverBasic;
    @GetMapping("/mapstruct")
    public BaseResult mapstruct() throws Exception{
        List<UserTest> userTests = new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            UserTest userTest = new UserTest();
            userTest.setUserId(i);
            if(i==2) {
                userTest.setUserName(null);
            } else {
                userTest.setUserName("Test12021-" + i );
            }
            userTest.setVaild(1);
            userTests.add(userTest);
        }
        List<UserCover> userCovers = userCoverBasic.userToCoverList(userTests);
        return setResultSuccess(userCovers);
    }
}

测试效果如下所示

{
    "code": 200,
    "msg": "",
    "data": [
        {
            "id": 0,
            "name": "Test12021-0",
            "vaild": 1
        },
        {
            "id": 1,
            "name": "Test12021-1",
            "vaild": 1
        },
        {
            "id": 2,
            "name": null,
            "vaild": 1
        }
    ]
}

你可能感兴趣的:(SpringBoot专栏,java)