# 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下