如果两个实体的对象完全一致
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.math.BigDecimal;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Product {
private Integer id;
private String name;
private BigDecimal price;
//private Integer productStatus;
}
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.math.BigDecimal;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ProductVo {
private Integer id; // productId
private String name; // productName
private BigDecimal price; // productPrice
//private Boolean status;
}
测试:
@Test
public void testPojo() throws Exception {
Product product = new Product(1, "电脑", new BigDecimal(100));
ProductVo productVo = new ProductVo();
BeanUtils.copyProperties(product,productVo); // 实体对象完全一样
//ProductVo productVo = ProductMapper.mapper.ProductVoPojo(product);
System.out.println(productVo);
}
结果:
两个对象的属性不一样:
引入依赖:
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct</artifactId>
<version>${org.mapstruct.version}</version>
</dependency>
<!-- lombok dependencies should not end up on classpath -->
<!-- 如果 MapStruct 生成的实现类里面,只创建了对象没有对属性进行 set 可能是版本没匹配 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${org.projectlombok.version}</version>
<scope>provided</scope>
</dependency>
<!-- IntelliJ pre 2018.1.1 requires the mapstruct processor-->
<!-- 高版本的 IDEA 就不需要添加这个依赖了 -->
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>${org.mapstruct.version}</version>
<scope>provided</scope>
</dependency>
分别对应的版本
<properties>
<org.mapstruct.version>1.4.1.Final</org.mapstruct.version>
<org.projectlombok.version>1.18.12</org.projectlombok.version>
</properties>
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.math.BigDecimal;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Product {
private Integer id;
private String name;
private BigDecimal price;
//private Integer productStatus;
}
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.math.BigDecimal;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ProductVo {
private Integer productId; // productId
private String productName; // productName
private BigDecimal productPrice; // productPrice
//private Boolean status;
}
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.Mappings;
import org.mapstruct.Named;
import org.mapstruct.factory.Mappers;
import java.util.List;
@Mapper
public interface ProductMapper {
ProductMapper mapper = Mappers.getMapper(ProductMapper.class);
@Mappings({
@Mapping(source = "id", target = "productId"),
@Mapping(source = "name", target = "productName"),
@Mapping(source = "price",target = "productPrice")
})
ProductVo ProductVoPojo(Product Product);
}
测试:
@Test
public void testPojo() throws Exception {
Product product = new Product(1, "电脑", new BigDecimal(100));
// ProductVo productVo = new ProductVo();
// BeanUtils.copyProperties(product,productVo); // 实体对象完全一样
ProductVo productVo = ProductMapper.mapper.ProductVoPojo(product);
System.out.println(productVo);
}
结果:
映射集合
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.Mappings;
import org.mapstruct.Named;
import org.mapstruct.factory.Mappers;
import java.util.List;
@Mapper
public interface ProductMapper {
ProductMapper mapper = Mappers.getMapper(ProductMapper.class);
@Mappings({
@Mapping(source = "id", target = "productId"),
@Mapping(source = "name", target = "productName"),
@Mapping(source = "price",target = "productPrice")
})
ProductVo ProductVoPojo(Product Product);
List<ProductVo> ProductVoPojoList(List<Product> product);
}
测试:
@Test
public void testPojoList() throws Exception {
ArrayList<Product> list = new ArrayList<>();
for (int i = 0; i < 3; i++) {
list.add(new Product(i,"电脑"+i,new BigDecimal(550)));
}
List<ProductVo> productVos = ProductMapper.mapper.ProductVoPojoList(list);
productVos.forEach(a-> System.out.println(a));
}
两个对象合并到一个对象
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Category {
private String categoryName;
}
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@AllArgsConstructor
@NoArgsConstructor
@Data
public class OrderVo {
private String product;
private String category;
}
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.math.BigDecimal;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Product {
private Integer id;
private String name;
private BigDecimal price;
//private Integer productStatus;
}
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.Mappings;
import org.mapstruct.Named;
import org.mapstruct.factory.Mappers;
import java.util.List;
@Mapper
public interface ProductMapper {
ProductMapper mapper = Mappers.getMapper(ProductMapper.class);
@Mappings({
@Mapping(source = "id", target = "productId"),
@Mapping(source = "name", target = "productName"),
@Mapping(source = "price",target = "productPrice")
//@Mapping(source = "productStatus",target = "status",qualifiedByName = "convertStatus")
})
ProductVo ProductVoPojo(Product Product);
List<ProductVo> ProductVoPojoList(List<Product> product);
@Mappings({
@Mapping(source = "product.name",target = "product"),
@Mapping(source = "category.categoryName",target = "category")
})
OrderVo createOder(Product product,Category category);
}
测试:
@Test
public void testOder() throws Exception {
Product product = new Product(1, "电脑", new BigDecimal(550));
Category category = new Category("电子产品");
OrderVo oder = ProductMapper.mapper.createOder(product, category);
System.out.println(oder);
}
添加条件判断
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.math.BigDecimal;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Product {
private Integer id;
private String name;
private BigDecimal price;
private Integer productStatus;
}
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.math.BigDecimal;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class ProductVo {
private Integer productId; // productId
private String productName; // productName
private BigDecimal productPrice; // productPrice
private Boolean status;
}
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.Mappings;
import org.mapstruct.Named;
import org.mapstruct.factory.Mappers;
import java.util.List;
@Mapper
public interface ProductMapper {
ProductMapper mapper = Mappers.getMapper(ProductMapper.class);
@Mappings({
@Mapping(source = "id", target = "productId"),
@Mapping(source = "name", target = "productName"),
@Mapping(source = "price",target = "productPrice"),
@Mapping(source = "productStatus",target = "status",qualifiedByName = "convertStatus")
})
ProductVo ProductVoPojo(Product Product);
@Named("convertStatus")
default Boolean convertStatus(Integer status){
if (status==1){
return true;
}else {
return false;
}
}
}
测试:
@Test
public void testPojo() throws Exception {
Product product = new Product(1, "电脑", new BigDecimal(100),1);
// ProductVo productVo = new ProductVo();
// BeanUtils.copyProperties(product,productVo); // 实体对象完全一样
ProductVo productVo = ProductMapper.mapper.ProductVoPojo(product);
System.out.println(productVo);
}