亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java中MapStruct的使用詳解

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

mapstruct概述

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

在維護一個新項目時,突然發(fā)現(xiàn)了,項目中一個新奇的點,就說關(guān)于MapStruct的使用,因為關(guān)于值傳遞映射,從最初的手動映射,到后來的工具類. 對于MapStruct使用較少,故整理記錄一下該使用說明

優(yōu)點:

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

缺點:

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

mapstruct案例

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

1 添加依賴

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

2 添加實體對象和DTO

實體對象

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

Dto對象

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

3 添加接口

/**
 * componentModel 制定模式spring  將bean交給spring管理
 * unmappedTargetPolicy ignore 目標屬性未匹配時系統(tǒng)忽略,不打印警告日志
 */
@Mapper(componentModel = "spring", unmappedTargetPolicy = ReportingPolicy.IGNORE )
public interface UserMapper {
    //靜態(tài)成員
    UserMapper INSTANCE = Mappers.getMapper(UserMapper.class);
    // 單個書寫
    // 常量
    @Mapping(source = "id", target = "userId",constant = "可以指定常量")
    // 默認值
    @Mapping(source = "name", target = "userName", defaultValue = "可以指定默認值")
    // 日期轉(zhuǎn)換
    @Mapping(source = "crateTime", target = "beginTime", dateFormat = "yyyy-MM-dd HH:mm:ss")
    UserDto userToUserDto(User user);
    // 批量寫法 與上述二選一
    @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)用上面單個轉(zhuǎn)換
    List<UserDto> userToUserDtoList(List<User> users);
}

4 通過Maven命令,編譯打包項目,發(fā)現(xiàn)target對應(yīng)包下面,生成了一個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é)

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

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

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

相關(guān)文章

最新評論