mirror of
https://gitee.com/easii/mapstruct-plus.git
synced 2025-12-07 17:48:35 +08:00
- AutoMapping增加source和defaultValue配置
This commit is contained in:
parent
7dcd98fd46
commit
de7814c88f
@ -18,7 +18,7 @@
|
|||||||
<properties>
|
<properties>
|
||||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||||
<mapstruct.version>1.5.1.Final</mapstruct.version>
|
<mapstruct.version>1.5.1.Final</mapstruct.version>
|
||||||
<mapstruct-plus.version>1.1.4</mapstruct-plus.version>
|
<mapstruct-plus.version>1.1.5</mapstruct-plus.version>
|
||||||
<lombok.version>1.18.22</lombok.version>
|
<lombok.version>1.18.22</lombok.version>
|
||||||
</properties>
|
</properties>
|
||||||
|
|
||||||
|
|||||||
@ -1,12 +1,19 @@
|
|||||||
package io.github.linpeilie.model;
|
package io.github.linpeilie.model;
|
||||||
|
|
||||||
|
import io.github.linpeilie.annotations.AutoMapper;
|
||||||
|
import io.github.linpeilie.annotations.AutoMapping;
|
||||||
|
import io.github.linpeilie.annotations.AutoMappings;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
@Data
|
@Data
|
||||||
|
@AutoMapper(target = GoodsVo.class, reverseConvertGenerate = true)
|
||||||
public class Goods {
|
public class Goods {
|
||||||
|
|
||||||
private String price;
|
private String price;
|
||||||
|
|
||||||
private String takeDownTime;
|
private String takeDownTime;
|
||||||
|
|
||||||
|
@AutoMapping(target = "price", source = "sku.price")
|
||||||
|
private Sku sku;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -0,0 +1,10 @@
|
|||||||
|
package io.github.linpeilie.model;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class GoodsVo {
|
||||||
|
|
||||||
|
private Integer price;
|
||||||
|
|
||||||
|
}
|
||||||
@ -0,0 +1,10 @@
|
|||||||
|
package io.github.linpeilie.model;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
public class Sku {
|
||||||
|
|
||||||
|
private Integer price;
|
||||||
|
|
||||||
|
}
|
||||||
@ -1,6 +1,7 @@
|
|||||||
package io.github.linpeilie.model;
|
package io.github.linpeilie.model;
|
||||||
|
|
||||||
import io.github.linpeilie.annotations.AutoMapper;
|
import io.github.linpeilie.annotations.AutoMapper;
|
||||||
|
import io.github.linpeilie.annotations.AutoMapping;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
|
|
||||||
@ -8,6 +9,7 @@ import lombok.Data;
|
|||||||
@Data
|
@Data
|
||||||
public class SysMenu {
|
public class SysMenu {
|
||||||
|
|
||||||
|
@AutoMapping(target = "path", defaultValue = "/")
|
||||||
private String path;
|
private String path;
|
||||||
|
|
||||||
private List<SysMenu> children;
|
private List<SysMenu> children;
|
||||||
|
|||||||
@ -3,13 +3,18 @@ package io.github.linpeilie;
|
|||||||
import cn.hutool.core.date.DateUtil;
|
import cn.hutool.core.date.DateUtil;
|
||||||
import io.github.linpeilie.model.Goods;
|
import io.github.linpeilie.model.Goods;
|
||||||
import io.github.linpeilie.model.GoodsDto;
|
import io.github.linpeilie.model.GoodsDto;
|
||||||
|
import io.github.linpeilie.model.GoodsVo;
|
||||||
import io.github.linpeilie.model.MapModelA;
|
import io.github.linpeilie.model.MapModelA;
|
||||||
|
import io.github.linpeilie.model.Sku;
|
||||||
|
import io.github.linpeilie.model.SysMenu;
|
||||||
|
import io.github.linpeilie.model.SysMenuVo;
|
||||||
import io.github.linpeilie.model.User;
|
import io.github.linpeilie.model.User;
|
||||||
import io.github.linpeilie.model.UserDto;
|
import io.github.linpeilie.model.UserDto;
|
||||||
import io.github.linpeilie.model.UserVO;
|
import io.github.linpeilie.model.UserVO;
|
||||||
import java.text.ParseException;
|
import java.text.ParseException;
|
||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -135,4 +140,31 @@ public class QuickStartTest {
|
|||||||
assert userDto.getMoney().equals("$12543.12");
|
assert userDto.getMoney().equals("$12543.12");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void treeTest() {
|
||||||
|
SysMenu sysMenu = new SysMenu();
|
||||||
|
sysMenu.setPath("/api");
|
||||||
|
|
||||||
|
final SysMenu role = new SysMenu();
|
||||||
|
role.setPath("/role");
|
||||||
|
|
||||||
|
final SysMenu user = new SysMenu();
|
||||||
|
|
||||||
|
sysMenu.setChildren(Arrays.asList(role, user));
|
||||||
|
|
||||||
|
final SysMenuVo sysMenuVo = converter.convert(sysMenu, SysMenuVo.class);
|
||||||
|
System.out.println(sysMenuVo);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void sourceTest() {
|
||||||
|
Goods goods = new Goods();
|
||||||
|
Sku sku = new Sku();
|
||||||
|
sku.setPrice(134);
|
||||||
|
goods.setSku(sku);
|
||||||
|
|
||||||
|
final GoodsVo goodsVo = converter.convert(goods, GoodsVo.class);
|
||||||
|
System.out.println(goodsVo);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -378,9 +378,14 @@ public class AutoMapperProcessor extends AbstractProcessor {
|
|||||||
}
|
}
|
||||||
|
|
||||||
AutoMappingMetadata metadata = new AutoMappingMetadata();
|
AutoMappingMetadata metadata = new AutoMappingMetadata();
|
||||||
|
if (autoMapping.source() != null && !autoMapping.source().isEmpty()) {
|
||||||
|
metadata.setSource(autoMapping.source());
|
||||||
|
} else {
|
||||||
|
metadata.setSource(ele.getSimpleName().toString());
|
||||||
|
}
|
||||||
metadata.setTargetClass(targetClass);
|
metadata.setTargetClass(targetClass);
|
||||||
metadata.setTarget(autoMapping.target());
|
metadata.setTarget(autoMapping.target());
|
||||||
metadata.setSource(ele.getSimpleName().toString());
|
metadata.setDefaultValue(autoMapping.defaultValue());
|
||||||
metadata.setIgnore(autoMapping.ignore());
|
metadata.setIgnore(autoMapping.ignore());
|
||||||
metadata.setExpression(autoMapping.expression());
|
metadata.setExpression(autoMapping.expression());
|
||||||
metadata.setDateFormat(autoMapping.dateFormat());
|
metadata.setDateFormat(autoMapping.dateFormat());
|
||||||
|
|||||||
@ -1,5 +1,6 @@
|
|||||||
package io.github.linpeilie.processor.generator;
|
package io.github.linpeilie.processor.generator;
|
||||||
|
|
||||||
|
import cn.hutool.core.util.StrUtil;
|
||||||
import com.squareup.javapoet.AnnotationSpec;
|
import com.squareup.javapoet.AnnotationSpec;
|
||||||
import com.squareup.javapoet.ClassName;
|
import com.squareup.javapoet.ClassName;
|
||||||
import com.squareup.javapoet.CodeBlock;
|
import com.squareup.javapoet.CodeBlock;
|
||||||
@ -73,10 +74,16 @@ public class AutoMapperGenerator {
|
|||||||
return autoMappingMetadataList.stream().map(autoMappingMetadata -> {
|
return autoMappingMetadataList.stream().map(autoMappingMetadata -> {
|
||||||
final AnnotationSpec.Builder builder = AnnotationSpec.builder(ClassName.get("org.mapstruct", "Mapping"))
|
final AnnotationSpec.Builder builder = AnnotationSpec.builder(ClassName.get("org.mapstruct", "Mapping"))
|
||||||
.addMember("target", CodeBlock.builder().add("$S", autoMappingMetadata.getTarget()).build())
|
.addMember("target", CodeBlock.builder().add("$S", autoMappingMetadata.getTarget()).build())
|
||||||
|
|
||||||
.addMember("dateFormat", CodeBlock.builder().add("$S", autoMappingMetadata.getDateFormat()).build())
|
|
||||||
.addMember("numberFormat", CodeBlock.builder().add("$S", autoMappingMetadata.getNumberFormat()).build())
|
|
||||||
.addMember("ignore", CodeBlock.builder().add(String.valueOf(autoMappingMetadata.isIgnore())).build());
|
.addMember("ignore", CodeBlock.builder().add(String.valueOf(autoMappingMetadata.isIgnore())).build());
|
||||||
|
if (StrUtil.isNotEmpty(autoMappingMetadata.getDateFormat())) {
|
||||||
|
builder.addMember("dateFormat", CodeBlock.builder().add("$S", autoMappingMetadata.getDateFormat()).build());
|
||||||
|
}
|
||||||
|
if (StrUtil.isNotEmpty(autoMappingMetadata.getNumberFormat())) {
|
||||||
|
builder.addMember("numberFormat", CodeBlock.builder().add("$S", autoMappingMetadata.getNumberFormat()).build());
|
||||||
|
}
|
||||||
|
if (StrUtil.isNotEmpty(autoMappingMetadata.getDefaultValue())) {
|
||||||
|
builder.addMember("defaultValue", CodeBlock.builder().add("$S", autoMappingMetadata.getDefaultValue()).build());
|
||||||
|
}
|
||||||
if (StringUtils.isNoneEmpty(autoMappingMetadata.getExpression())) {
|
if (StringUtils.isNoneEmpty(autoMappingMetadata.getExpression())) {
|
||||||
builder.addMember("expression",
|
builder.addMember("expression",
|
||||||
CodeBlock.builder().add("$S", autoMappingMetadata.getExpression()).build());
|
CodeBlock.builder().add("$S", autoMappingMetadata.getExpression()).build());
|
||||||
|
|||||||
@ -18,6 +18,8 @@ public class AutoMappingMetadata {
|
|||||||
|
|
||||||
private boolean ignore = false;
|
private boolean ignore = false;
|
||||||
|
|
||||||
|
private String defaultValue = "";
|
||||||
|
|
||||||
public ClassName getTargetClass() {
|
public ClassName getTargetClass() {
|
||||||
return targetClass;
|
return targetClass;
|
||||||
}
|
}
|
||||||
@ -73,4 +75,12 @@ public class AutoMappingMetadata {
|
|||||||
public void setIgnore(final boolean ignore) {
|
public void setIgnore(final boolean ignore) {
|
||||||
this.ignore = ignore;
|
this.ignore = ignore;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getDefaultValue() {
|
||||||
|
return defaultValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setDefaultValue(final String defaultValue) {
|
||||||
|
this.defaultValue = defaultValue;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,5 +1,7 @@
|
|||||||
package io.github.linpeilie;
|
package io.github.linpeilie;
|
||||||
|
|
||||||
|
import cn.hutool.core.collection.CollectionUtil;
|
||||||
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
import org.mapstruct.MappingTarget;
|
import org.mapstruct.MappingTarget;
|
||||||
@ -11,6 +13,9 @@ public interface BaseMapper<S, T> {
|
|||||||
T convert(S source, @MappingTarget T target);
|
T convert(S source, @MappingTarget T target);
|
||||||
|
|
||||||
default List<T> convert(List<S> sourceList) {
|
default List<T> convert(List<S> sourceList) {
|
||||||
|
if (CollectionUtil.isEmpty(sourceList)) {
|
||||||
|
return Collections.emptyList();
|
||||||
|
}
|
||||||
return sourceList.stream().map(this::convert).collect(Collectors.toList());
|
return sourceList.stream().map(this::convert).collect(Collectors.toList());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -12,6 +12,13 @@ public @interface AutoMapping {
|
|||||||
|
|
||||||
Class<?> targetClass() default DefaultMapping.class;
|
Class<?> targetClass() default DefaultMapping.class;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 来源,默认取当前字段名称
|
||||||
|
* - 可以是当前类中的属性名
|
||||||
|
* - 也可以是属性名.属性名,例如:address.city.name
|
||||||
|
*/
|
||||||
|
String source() default "";
|
||||||
|
|
||||||
String target();
|
String target();
|
||||||
|
|
||||||
String dateFormat() default "";
|
String dateFormat() default "";
|
||||||
@ -22,4 +29,9 @@ public @interface AutoMapping {
|
|||||||
|
|
||||||
boolean ignore() default false;
|
boolean ignore() default false;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 默认值
|
||||||
|
*/
|
||||||
|
String defaultValue() default "";
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
2
pom.xml
2
pom.xml
@ -17,7 +17,7 @@
|
|||||||
</modules>
|
</modules>
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
<mapstruct-plus.version>1.1.4</mapstruct-plus.version>
|
<mapstruct-plus.version>1.1.5</mapstruct-plus.version>
|
||||||
<maven.compiler.source>8</maven.compiler.source>
|
<maven.compiler.source>8</maven.compiler.source>
|
||||||
<maven.compiler.target>8</maven.compiler.target>
|
<maven.compiler.target>8</maven.compiler.target>
|
||||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user