最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java中MapStruct的使用詳解

 更新時(shí)間:2023年09月19日 09:06:40   作者:韓_師兄  
這篇文章主要介紹了Java中MapStruct的使用詳解,mapstruct,全稱是org.mapstruct.Mapper, 是將接口或抽象類標(biāo)記為映射器,并通過(guò)MapStruct為這個(gè)接口或者抽象類生成一個(gè)實(shí)現(xiàn)類,大大簡(jiǎn)化了Java bean類型之間轉(zhuǎn)換,需要的朋友可以參考下

mapstruct概述

mapstruct,全稱是org.mapstruct.Mapper, 是將接口或抽象類標(biāo)記為映射器,并通過(guò)MapStruct為這個(gè)接口或者抽象類生成一個(gè)實(shí)現(xiàn)類,大大簡(jiǎn)化了Java bean類型之間轉(zhuǎn)換

在維護(hù)一個(gè)新項(xiàng)目時(shí),突然發(fā)現(xiàn)了,項(xiàng)目中一個(gè)新奇的點(diǎn),就說(shuō)關(guān)于MapStruct的使用,因?yàn)殛P(guān)于值傳遞映射,從最初的手動(dòng)映射,到后來(lái)的工具類. 對(duì)于MapStruct使用較少,故整理記錄一下該使用說(shuō)明

優(yōu)點(diǎn):

  • mapstruct是在編譯時(shí)完成Bean轉(zhuǎn)換,
  • 和傳統(tǒng)相比,提升了服務(wù)性能
  • 編譯后在target目錄,生成對(duì)應(yīng)的xxximp.java文件,方便定位問(wèn)題

缺點(diǎn):

  • 必須添加一個(gè)接口或者抽象類,才能實(shí)現(xiàn)映射

mapstruct案例

依賴在spring環(huán)境中使用,通過(guò)編譯打包發(fā)現(xiàn),會(huì)生成對(duì)應(yīng)接口的實(shí)現(xiàn)類.

1 添加依賴

        <dependency>
            <groupId>org.mapstruct</groupId>
            <artifactId>mapstruct</artifactId>
            <version>1.4.2.Final</version>
        </dependency>

2 添加實(shí)體對(duì)象和DTO

實(shí)體對(duì)象

@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
    private String id;
    private String name;
    private Date crateTime;
}

Dto對(duì)象

@Data
@NoArgsConstructor
@AllArgsConstructor
public class UserDto {
    private String userId;
    private String userName;
    private Date beginTime;
}

3 添加接口

/**
 * componentModel 制定模式spring  將bean交給spring管理
 * unmappedTargetPolicy ignore 目標(biāo)屬性未匹配時(shí)系統(tǒng)忽略,不打印警告日志
 */
@Mapper(componentModel = "spring", unmappedTargetPolicy = ReportingPolicy.IGNORE )
public interface UserMapper {
    //靜態(tài)成員
    UserMapper INSTANCE = Mappers.getMapper(UserMapper.class);
    // 單個(gè)書(shū)寫(xiě)
    // 常量
    @Mapping(source = "id", target = "userId",constant = "可以指定常量")
    // 默認(rèn)值
    @Mapping(source = "name", target = "userName", defaultValue = "可以指定默認(rèn)值")
    // 日期轉(zhuǎn)換
    @Mapping(source = "crateTime", target = "beginTime", dateFormat = "yyyy-MM-dd HH:mm:ss")
    UserDto userToUserDto(User user);
    // 批量寫(xiě)法 與上述二選一
    @Mappings({
            // Integer 到 String的轉(zhuǎn)換
            @Mapping(source = "id", target = "numId" ,numberFormat = "$#.00"),
            @Mapping(source = "name", target = "userName"),
            //Date 轉(zhuǎn)字符串
            @Mapping(source = "crateTime", target = "crtTime", dateFormat = "dd.MM.yyyy"),
            // 使用java可執(zhí)行代碼或函數(shù)
            @Mapping(target = "crateTime", expression = "java(java.time.LocalDateTime.now()")
    })
    UserDto userToUserDto2(User user);
    // 批量轉(zhuǎn)換,循環(huán)調(diào)用上面單個(gè)轉(zhuǎn)換
    List<UserDto> userToUserDtoList(List<User> users);
}

4 通過(guò)Maven命令,編譯打包項(xiàng)目,發(fā)現(xiàn)target對(duì)應(yīng)包下面,生成了一個(gè)UserMapperImpl.class文件.

@Component
public class UserMapperImpl implements UserMapper {
    public UserMapperImpl() {
    }
    @Override
    public UserDto userToUserDto(User user) {
        if (user == null){
            return null;
        }else{
            UserDto userDto = new UserDto();
            user.setId(user.getId());
            user.setName(user.getName());
            user.setCrateTime(user.getCrateTime());
            return userDto;
        }
    }
    @Override
    public List<UserDto> userToUserDtoList(List<User> users) {
        if (users == null){
            return null;
        }else{
            List<UserDto> list = new ArrayList<>(users.size());
            Iterator var3 = users.iterator();
            while (var3.hasNext()){
                User user = (User) var3.next();
                list.add(this.userToUserDto(user));
            }
            return list;
        }
    }
}

mapstruct總結(jié)

通過(guò)mapstruct的使用發(fā)現(xiàn),和之前工具類的映射有很多不同.

不過(guò)其工作定位在,實(shí)體對(duì)象,Dto,Bo等對(duì)象在不通層級(jí)的轉(zhuǎn)換,可以通過(guò)默認(rèn)值,常量值,java代碼和函數(shù),比較靈活多變.

到此這篇關(guān)于Java中MapStruct的使用詳解的文章就介紹到這了,更多相關(guān)MapStruct的使用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Springboot mybatis-plus配置及用法詳解

    Springboot mybatis-plus配置及用法詳解

    這篇文章主要介紹了Springboot mybatis-plus配置及用法詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-09-09
  • Java項(xiàng)目中實(shí)現(xiàn)使用traceId跟蹤請(qǐng)求全流程日志

    Java項(xiàng)目中實(shí)現(xiàn)使用traceId跟蹤請(qǐng)求全流程日志

    這篇文章主要介紹了Java項(xiàng)目中實(shí)現(xiàn)使用traceId跟蹤請(qǐng)求全流程日志方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • Java如何通過(guò)反射機(jī)制獲取數(shù)據(jù)類對(duì)象的屬性及方法

    Java如何通過(guò)反射機(jī)制獲取數(shù)據(jù)類對(duì)象的屬性及方法

    文章介紹了如何使用Java反射機(jī)制獲取類對(duì)象的所有屬性及其對(duì)應(yīng)的get、set方法,以及如何通過(guò)反射機(jī)制實(shí)現(xiàn)類對(duì)象的實(shí)例化,感興趣的朋友跟隨小編一起看看吧
    2025-01-01
  • 詳細(xì)聊聊RabbitMQ竟無(wú)法反序列化List問(wèn)題

    詳細(xì)聊聊RabbitMQ竟無(wú)法反序列化List問(wèn)題

    這篇文章主要給大家介紹了關(guān)于RabbitMQ竟無(wú)法反序列化List的相關(guān)資料,文中通過(guò)示例代碼將問(wèn)題以及解決的過(guò)程介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2021-09-09
  • Spring boot配置 swagger的示例代碼

    Spring boot配置 swagger的示例代碼

    Swagger是一組開(kāi)源項(xiàng)目,Spring 基于swagger規(guī)范,可以將基于SpringMVC和Spring Boot項(xiàng)目的項(xiàng)目代碼,自動(dòng)生成JSON格式的描述文件,接下來(lái)通過(guò)本文給大家介紹Spring boot配置 swagger的示例代碼,一起看看吧
    2021-09-09
  • 淺談Java基準(zhǔn)性能測(cè)試之JMH

    淺談Java基準(zhǔn)性能測(cè)試之JMH

    JMH是Java Microbenchmark Harness的簡(jiǎn)稱,一個(gè)針對(duì)Java做基準(zhǔn)測(cè)試的工具。想準(zhǔn)確的對(duì)一段代碼做基準(zhǔn)性能測(cè)試并不容易,因?yàn)镴VM層面在編譯期、運(yùn)行時(shí)對(duì)代碼做很多優(yōu)化,當(dāng)代碼塊處于整個(gè)系統(tǒng)中運(yùn)行時(shí)并不一定會(huì)生效,產(chǎn)生錯(cuò)誤的基準(zhǔn)測(cè)試結(jié)果,這個(gè)問(wèn)題就是JMH要解決的
    2021-06-06
  • Java獲取凌晨時(shí)間戳的方法分析

    Java獲取凌晨時(shí)間戳的方法分析

    這篇文章主要介紹了Java獲取凌晨時(shí)間戳的方法,結(jié)合實(shí)例形式對(duì)比分析了java時(shí)間戳運(yùn)算的簡(jiǎn)單操作技巧,需要的朋友可以參考下
    2018-03-03
  • java8 LocalDate LocalDateTime等時(shí)間類用法實(shí)例分析

    java8 LocalDate LocalDateTime等時(shí)間類用法實(shí)例分析

    這篇文章主要介紹了java8 LocalDate LocalDateTime等時(shí)間類用法,結(jié)合具體實(shí)例形式分析了LocalDate、LocalTime、LocalDateTime等日期時(shí)間相關(guān)類的功能與具體使用技巧,需要的朋友可以參考下
    2017-04-04
  • SpringBoot實(shí)現(xiàn)國(guó)際化i18n詳解

    SpringBoot實(shí)現(xiàn)國(guó)際化i18n詳解

    國(guó)際化(Internationalization,簡(jiǎn)稱i18n)是指在軟件應(yīng)用中支持多種語(yǔ)言和文化的能力,本文將介紹如何在Spring?Boot應(yīng)用中實(shí)現(xiàn)國(guó)際化,需要的可以參考下
    2024-12-12
  • 總結(jié)十個(gè)實(shí)用但偏執(zhí)的Java編程技術(shù)

    總結(jié)十個(gè)實(shí)用但偏執(zhí)的Java編程技術(shù)

    Java是世界上最流行的程序語(yǔ)言,從1995年問(wèn)世以來(lái),Java的生態(tài)系統(tǒng)在一直在蓬勃的發(fā)展著。下面這篇文章主要總結(jié)了十個(gè)實(shí)用但偏執(zhí)的Java編程技術(shù),需要的朋友可以參考借鑒,下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-01-01

最新評(píng)論

公主岭市| 凤冈县| 抚顺市| 太谷县| 三穗县| 霍林郭勒市| 武清区| 丰县| 津南区| 中宁县| 若尔盖县| 观塘区| 赤壁市| 营山县| 浦县| 内丘县| 湘潭县| 宁都县| 贵德县| 随州市| 会宁县| 盐边县| 锡林浩特市| 辽阳县| 曲阜市| 宜宾县| 霍城县| 临江市| 定远县| 嘉峪关市| 岱山县| 兴宁市| 高碑店市| 大余县| 谷城县| 绥江县| 北流市| 汶上县| 和龙市| 海安县| 保德县|