久久精品精选,精品九九视频,www久久只有这里有精品,亚洲熟女乱色综合一区
    分享

    干貨:SpringBoot集成MapStructPlus,使用注解快速轉換對象

     jacklopy 2025-09-02

    摘要:本文介紹MapStructPlus,也就是MapStruct的加強版,使用注解來簡化手寫對象轉換器。

    認識Mapstruct加強版

    官網:https://www./ 
    gitee:https:///easii/mapstruct-plus

    關鍵注解:

    • 會默認生成類和目標類的雙向轉換接口

     

    @AutoMappers({
        @AutoMapper(target = UserDto.class),
        @AutoMapper(target = UserVO.class)
    })

    // 或者
    @AutoMapper(target = UserDto.class)
    // 使用
    User user= Converter.convert(UserDto, User.class);

     


    • 作用在類字段上

     

    @AutoMapping(target = "目標字段")
    @AutoMapping(target = "目標日期字段", dateFormat = "yyyy-MM-dd HH:mm:ss")
    @AutoMapping(target = "目標數值字段", numberFormat = "$#.00", defaultValue = "100")
    @AutoMapping(target = "目標字段", expression = "java(java.lang.String.join(",", source.getEducationList()))")

     

    • 可以自定義類型轉換器,同時使用uses綁定

     

    //使用
    @AutoMapper(target = User.class, uses = StringToListString.class)
    //定義
    @Component
    public interface StringToListString {
        default List<String> stringToListString(String str) {
            if (str == null) {
                return Collections.emptyList();
            }
            return Arrays.asList(str.split(","));
        }
    }

     


    示例代碼 [SpringBoot]

    1)引入依賴

     

    <!-- 依賴和插件 -->
    <dependencies>
        <dependency>
            <groupId>io.github.linpeilie</groupId>
            <artifactId>mapstruct-plus-spring-boot-starter</artifactId>
            <version>1.5.0</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.20</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <version>2.7.18</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <annotationProcessorPaths>
                        <path>
                            <groupId>io.github.linpeilie</groupId>
                            <artifactId>mapstruct-plus-processor</artifactId>
                            <version>1.5.0</version>
                        </path>
                        <!-- Lombok處理器 防止lombok和mapstruct沖突 致使lombok注解失效 -->
                        <path>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                            <version>1.18.20</version>
                        </path>
                        <!-- 最新正式版是 0.2.0(或 0.1.0),而不是跟隨 Lombok 主版本 -->
                        <path>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok-mapstruct-binding</artifactId>
                            <version>0.2.0</version>
                        </path>
                    </annotationProcessorPaths>
                </configuration>
            </plugin>
        </plugins>
    </build>

     

    2)定義對象A

     

    package org.coffeebeans.entity;

    import io.github.linpeilie.annotations.AutoMapper;
    import io.github.linpeilie.annotations.AutoMapping;
    import lombok.Builder;
    import lombok.Data;
    import org.coffeebeans.config.StringToListString;
    import java.math.BigDecimal;

    /**
     * <li>ClassName: User </li>
     * <li>Author: OakWang </li>
     */

    @Data
    @Builder
    @AutoMapper(target = UserDto.class, uses = StringToListString.class)
    public class User {

        private Integer id;

        @AutoMapping(target = "name")
        private String username;

        @AutoMapping(target = "age", defaultValue = "100")
        private Integer age;

        @AutoMapping(target = "familyAddress")
        private String address;

        @AutoMapping(target = "money", expression = "java(new java.math.BigDecimal(\"3000\"))")
        private BigDecimal money;
    }

     

    3)定義對象B

     

    package org.coffeebeans.entity;

    import io.github.linpeilie.annotations.AutoMapper;
    import lombok.Data;
    import java.math.BigDecimal;

    /**
     * <li>ClassName: UserDto </li>
     * <li>Author: OakWang </li>
     */

    @Data
    @AutoMapper(target = User.class)
    public class UserDto {

        private Integer id;

        private String name;

        private Integer age;

        private String familyAddress;

        private BigDecimal money;
    }

     

    4)測試對象轉換

     

    package org.coffeebeans;

    import org.coffeebeans.entity.User;
    import org.coffeebeans.entity.UserDto;
    import org.junit.jupiter.api.Test;
    import io.github.linpeilie.Converter;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.test.context.SpringBootTest;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Objects;

    /**
     * <li>ClassName: MapstructTest </li>
     * <li>Author: OakWang </li>
     */

    @SpringBootTest
    public class MapstructPlusTest {

        @Autowired
        private Converter converter;

        @Test
        public void test() {
            // 創建一個User對象
            List<User> userList = new ArrayList<>();
            User user = User.builder().id(1).age(null).username("姓名1").address("地址1").money(null).build();
            userList.add(user);
            // 使用UserTransform將User對象轉換為UserDto對象
            UserDto userDto = converter.convert(user, UserDto.class);
            List<UserDto> userDtos = converter.convert(userList, UserDto.class);
            // 驗證轉換結果
            System.out.println("id屬性是否相等:" + Objects.equals(user.getId(), userDto.getId()));
            System.out.println("name屬性是否相等:" + Objects.equals(user.getUsername(), userDto.getName()));
            System.out.println("age屬性是否相等:" + Objects.equals(user.getAge(), userDto.getAge()));
            System.out.println("address屬性是否相等:" + Objects.equals(user.getAddress(), userDto.getFamilyAddress()));
            System.out.println("money屬性是否相等:" + Objects.equals(user.getMoney(), userDto.getMoney()));
            System.out.println("User對象:" + user);
            System.out.println("UserDto對象:" + userDto);
            System.out.println("User集合:" + userList);
            System.out.println("UserDto集合:" + userDtos);

            /*
            輸出:
                id屬性是否相等:true
                name屬性是否相等:true
                age屬性是否相等:false
                address屬性是否相等:true
                money屬性是否相等:false
                User對象:User(id=1, username=姓名1, age=null, address=地址1, money=null)
                UserDto對象:UserDto(id=1, name=姓名1, age=100, familyAddress=地址1, money=3000)
                User集合:[User(id=1, username=姓名1, age=null, address=地址1, money=null)]
                UserDto集合:[UserDto(id=1, name=姓名1, age=100, familyAddress=地址1, money=3000)]
             */

        }
    }

     


    總結:以上我們了解了MapStruct的加強版MapStructPlus,通過注解可以更加便捷映射對象,省去了手寫轉換類的步驟,用起來!

      本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發布,不代表本站觀點。請注意甄別內容中的聯系方式、誘導購買等信息,謹防詐騙。如發現有害或侵權內容,請點擊一鍵舉報。
      轉藏 分享 獻花(0

      0條評論

      發表

      請遵守用戶 評論公約

      類似文章 更多

      主站蜘蛛池模板: 精品国产人妻一区二区三区久久| 丰满少妇2中文在线观看| 国产成人高清亚洲综合| 又湿又紧又大又爽A视频| 亚洲成AV人片在线观看麦芽| 另类 专区 欧美 制服| 久久亚洲国产精品成人AV秋霞| 精品不卡一区二区三区| 16女下面流水不遮视频| 91中文字幕一区在线| 国产精品国产三级国AV| 亚洲国产午夜精品福利| 人妻丰满熟AV无码区HD| 高清自拍亚洲精品二区| 性做久久久久久久久| 欧美不卡无线在线一二三区观| 亚洲AV中文无码乱人伦在线观看| 男女动态无遮挡动态图| 久久久久无码国产精品不卡| 国产午夜福利小视频合集| 无码国产精品一区二区免费I6| 国产又色又刺激高潮视频| 我国产码在线观看av哈哈哈网站| 真实国产熟睡乱子伦视频| 蜜臀av久久国产午夜| 日韩AV片无码一区二区不卡电影| 5D肉蒲团之性战奶水欧美| 免费无码又爽又刺激毛片| 欧美综合人人做人人爱| 免费无码成人AV片在线| 后入内射国产一区二区| 日本国产一区二区三区在线观看| 国产一区二区不卡91| 亚洲精品色午夜无码专区日韩| 国产精品国语对白露脸在线播放 | 第一精品福利导福航| 丰满人妻一区二区三区视频53| 欧美交A欧美精品喷水| 久久精品国产再热青青青| 青青青爽在线视频观看| 精品久久久久久无码中文野结衣|