tianyun 2 years ago
parent
commit
cc3fd7ee6a

+ 40 - 0
demo-mapstruct/pom.xml

@@ -0,0 +1,40 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <parent>
+        <artifactId>java-base-maven</artifactId>
+        <groupId>com.alvin</groupId>
+        <version>1.0-SNAPSHOT</version>
+    </parent>
+    <modelVersion>4.0.0</modelVersion>
+
+    <artifactId>demo-mapstruct</artifactId>
+
+    <properties>
+        <maven.compiler.source>8</maven.compiler.source>
+        <maven.compiler.target>8</maven.compiler.target>
+        <mapstruct.version>1.5.1.Final</mapstruct.version>
+    </properties>
+
+    <dependencies>
+        <dependency>
+            <groupId>org.springframework.boot</groupId>
+            <artifactId>spring-boot-starter-web</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.mapstruct</groupId>
+            <artifactId>mapstruct</artifactId>
+            <version>${mapstruct.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.mapstruct</groupId>
+            <artifactId>mapstruct-processor</artifactId>
+            <version>${mapstruct.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>org.projectlombok</groupId>
+            <artifactId>lombok</artifactId>
+        </dependency>
+    </dependencies>
+</project>

+ 30 - 0
demo-mapstruct/src/main/java/com/alvin/Main.java

@@ -0,0 +1,30 @@
+package com.alvin;
+
+import com.alvin.entity.UserVO2;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+import javax.annotation.PostConstruct;
+
+@SpringBootApplication
+public class Main {
+    @Autowired
+    public UserCovertBasic userCovertBasic;
+
+    public static void main(String[] args) {
+        SpringApplication.run(Main.class);
+    }
+
+    @PostConstruct
+    public void test() {
+        //UserBa userBa = new UserBa();
+        //userBa.setId(123);
+        //
+        //System.out.println(userCovertBasic.toConvertVO21(userBa));
+
+        UserVO2 userVO2 = new UserVO2();
+        userVO2.setId(123);
+        System.out.println(userCovertBasic.toba(userVO2).getId());
+    }
+}

+ 34 - 0
demo-mapstruct/src/main/java/com/alvin/UserCovertBasic.java

@@ -0,0 +1,34 @@
+package com.alvin;
+
+import com.alvin.entity.User;
+import com.alvin.entity.UserBa;
+import com.alvin.entity.UserVO1;
+import com.alvin.entity.UserVO2;
+import org.mapstruct.Mapper;
+
+@Mapper(componentModel = "spring")
+public interface UserCovertBasic {
+
+    /**
+     * 字段数量类型数量相同,利用工具BeanUtils也可以实现类似效果
+     *
+     * @param source
+     * @return
+     */
+    UserVO1 toConvertVO1(User source);
+
+    User fromConvertEntity1(UserVO1 userVO1);
+
+    /**
+     * 字段数量类型相同,数量少:仅能让多的转换成少的,故没有fromConvertEntity2
+     *
+     * @param source
+     * @return
+     */
+    UserVO2 toConvertVO2(User source);
+
+    UserVO2 toConvertVO21(UserBa source);
+
+    UserBa toba(UserVO2 vo2);
+
+}

+ 19 - 0
demo-mapstruct/src/main/java/com/alvin/entity/User.java

@@ -0,0 +1,19 @@
+package com.alvin.entity;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.SuperBuilder;
+
+import java.time.LocalDateTime;
+
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@SuperBuilder
+public class User {
+    private Integer id;
+    private String name;
+    private String createTime;
+    private LocalDateTime updateTime;
+}

+ 15 - 0
demo-mapstruct/src/main/java/com/alvin/entity/UserBa.java

@@ -0,0 +1,15 @@
+package com.alvin.entity;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.experimental.SuperBuilder;
+
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+//@SuperBuilder
+@SuperBuilder
+public class UserBa extends User{
+    private Integer sss;
+}

+ 19 - 0
demo-mapstruct/src/main/java/com/alvin/entity/UserVO1.java

@@ -0,0 +1,19 @@
+package com.alvin.entity;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.time.LocalDateTime;
+
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+public class UserVO1 {
+    private Integer id;
+    private String name;
+    private String createTime;
+    private LocalDateTime updateTime;
+}

+ 17 - 0
demo-mapstruct/src/main/java/com/alvin/entity/UserVO2.java

@@ -0,0 +1,17 @@
+package com.alvin.entity;
+
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@Builder
+public class UserVO2 {
+    private Integer id;
+    private String name;
+    private String createTime;
+
+}

+ 1 - 0
pom.xml

@@ -12,6 +12,7 @@
         <module>test1</module>
         <module>springboot-main</module>
         <module>leetcode</module>
+        <module>demo-mapstruct</module>
     </modules>
 
     <properties>