中文字幕精品亚洲无线码二区,国产黄a三级三级三级看三级,亚洲七七久久桃花影院,丰满少妇被猛烈进入,国产小视频在线观看网站

22、MapStruct對象映射(she)轉換

一、對象(xiang)轉(zhuan)換(huan)方式:

1、SET與GET賦值方式:

SET與GET賦值(zhi)方(fang)(fang)式(shi)是(shi)最基本的一種對象轉換(huan)方(fang)(fang)式(shi)。通過手動調用源(yuan)對象的 getter 方(fang)(fang)法,獲取(qu)源(yuan)對象的屬(shu)性值(zhi),然后通過目標對象的 setter方(fang)(fang)法將值(zhi)設置到目標對象中。

public class UserDTO {
    private String name;
    private int age;

    // Getters and Setters
}

public class UserEntity {
    private String name;
    private int age;

    // Getters and Setters
}

public class Converter {
    public UserDTO convertToDTO(UserEntity userEntity) {
        UserDTO userDTO = new UserDTO();
        userDTO.setName(userEntity.getName());
        userDTO.setAge(userEntity.getAge());
        return userDTO;
    }

    public UserEntity convertToEntity(UserDTO userDTO) {
        UserEntity userEntity = new UserEntity();
        userEntity.setName(userDTO.getName());
        userEntity.setAge(userDTO.getAge());
        return userEntity;
    }
}

2、BeanUtils工具類轉換方式:

BeanUtils 是 Apache Commons BeanUtils 庫(ku)提供的(de)(de)(de)工具(ju)類,它可(ke)以簡化對(dui)(dui)象之間(jian)的(de)(de)(de)屬性(xing)復制(zhi)工作。通(tong)過 BeanUtils.copyProperties() 方法,可(ke)以將(jiang)一個對(dui)(dui)象的(de)(de)(de)屬性(xing)值(zhi)復制(zhi)到(dao)另一個對(dui)(dui)象中,通(tong)常用(yong)于(yu)對(dui)(dui)象之間(jian)的(de)(de)(de)轉換。該方法會自(zi)動映射源(yuan)對(dui)(dui)象和(he)目標(biao)對(dui)(dui)象的(de)(de)(de)同名屬性(xing)。

import org.apache.commons.beanutils.BeanUtils;

public class UserDTO {
    private String name;
    private int age;

    // Getters and Setters
}

public class UserEntity {
    private String name;
    private int age;

    // Getters and Setters
}

public class Converter {
    public UserDTO convertToDTO(UserEntity userEntity) throws Exception {
        UserDTO userDTO = new UserDTO();
        BeanUtils.copyProperties(userDTO, userEntity);  // 復制屬性
        return userDTO;
    }

    public UserEntity convertToEntity(UserDTO userDTO) throws Exception {
        UserEntity userEntity = new UserEntity();
        BeanUtils.copyProperties(userEntity, userDTO);  // 復(fu)制屬(shu)性(xing)
        return userEntity;
    }
}

3、MapStruct對象映射轉換方式:

底層基于SET與GET賦值方(fang)式(shi)實(shi)現

特性SET與GET賦值方式BeanUtils工具類MapStruct對象映射

實現方式

手動調用 getter 和 setter

使用 BeanUtils.copyProperties()

編譯時生成代碼(ma),通過注解定(ding)義(yi)映射

優點

直接且靈活,完(wan)全(quan)可(ke)控

代碼簡潔,易于使用

高性能(neng),支持復雜映射,自定義規(gui)則(ze)

缺點

代碼冗長,易出錯

僅支持簡單類型轉換

配置較為(wei)復雜,需依賴(lai) MapStruct

性能

較(jiao)低(尤其是大量屬性時(shi))

較低(反射機制)

高(編(bian)譯時生成(cheng)代(dai)碼)

 

二、MapStruct對象映射轉換方(fang)式(shi)的(de)基本(ben)使用:

1、POM依賴:

<!--MapStruct 依賴-->
<dependency>
     <groupId>org.mapstruct</groupId>
     <artifactId>mapstruct</artifactId>
     <version>1.4.1.Final</version>
</dependency>
<!--MapStruct 注解處理器-->
<dependency>
    <groupId>org.mapstruct</groupId>
    <artifactId>mapstruct-processor</artifactId>
    <version>1.4.1.Final</version>
</dependency>

注:

MapStruct版本(ben)與SpringBoot版本(ben)相對應
MapStruct依賴(lai)必(bi)須(xu)在Lombok依賴(lai)的后面

2、常規處理:

在MapStruct中,若(ruo)兩個類型(xing)中的屬性名稱相同,則會自(zi)動(dong)完成轉換。

import com.example.mapstructdemo.model.UserBasicVO;
import com.example.mapstructdemo.model.UserResponseVO;
import org.mapstruct.Mapper;


/**
 * 常(chang)規處理轉(zhuan)換:
 * 在MapStruct中,若兩個類型中的(de)屬(shu)性名(ming)稱相同,則會自動完成轉(zhuan)換。
 * */
@Mapper(componentModel = "spring")
public interface ConventionalProcessingConversion {

    UserResponseVO toHandelUserInfo(UserBasicVO userBasicVO);

}

3、特殊處理:

在MapStruct中,若想自定義(yi)轉換的屬性(xing),則可使用@Mapping注解進(jin)行處理。

import com.example.mapstructdemo.model.TypeEnums;
import com.example.mapstructdemo.model.UserBasicVO;
import com.example.mapstructdemo.model.UserResponseVO;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.Mappings;

/**
 * 特殊處理轉換:
 *     1、時(shi)間格式(shi)化(hua)
 *     2、返回值(zhi)處理
 *     3、默(mo)認(ren)值(zhi)設置
 *     ......
 *
 * */
@Mapper(componentModel = "spring", imports = {TypeEnums.class}) //TypeEnums:自定(ding)義枚舉(ju)轉換等方式
public interface SpecialProcessingConversion {

    @Mappings({
            @Mapping(target = "type",expression = "java(TypeEnums.getValue(userBasicVO.getType()))"),//返回值(zhi)處理
            @Mapping(target = "createDate", dateFormat = "yyyy-MM-dd HH:mm:ss"),//日(ri)期格式轉換(huan)
            @Mapping(target = "info", source = "sex"), //target用來指定(ding)要處(chu)理的目標類型的屬性,source用來指定(ding)源類型的屬性名
            // @Mapping(target = "info", source = "sex", defaultExpression = "java( com.demo.UserSexMethod.getDefaultSex())"), //sex為(wei)null,設置自(zi)定義默認(ren)值
            @Mapping(target = "info2", constant = "備注信息")//賦值
    })
    UserResponseVO toHandelUserInfo(UserBasicVO userBasicVO);

}

 

posted on 2024-12-16 23:32  愛文(Iven)  閱讀(580)  評論(0)    收藏  舉報

導航