**1. 三個實體類**
```java
@Data
@Builder
public class Province {
private Integer provinceId;
private String provinceName;
}
@Data
@Builder
public class City {
private Integer cityId;
private String cityName;
}
/**
* 包含了Province和City的所有字段
*/
@Data
@Builder
public class CountryDto {
private Integer provinceId;
private String provinceName;
private Integer cityId;
private String cityName;
}
```
**2. 定義映射接口**
```java
@Mapper
public interface CountryMapper {
CountryMapper INSTANCE = Mappers.getMapper(CountryMapper.class);
/**
* 可以自定義一個映射方法。
* 該方法將Province和City的所有屬性都映射到CountryDto中。
*/
default CountryDto toDto(Province s1, City s2) {
return CountryDto.builder()
.provinceId(s1.getProvinceId())
.provinceName(s1.getProvinceName())
.cityId(s2.getCityId())
.cityName(s2.getCityName())
.build();
}
}
```
**3. 測試**
```java
@Test
public void testCountryMapper() {
Province province = Province.builder().provinceId(1001).provinceName("地球").build();
City city = City.builder().cityId(1002).cityName("亞洲").build();
CountryDto countryDto = CountryMapper.INSTANCE.toDto(province, city);
//CountryDto(provinceId=1001, provinceName=地球, cityId=1002, cityName=亞洲)
System.out.println(countryDto);
}
```
**4. 查看映射接口被MapStruct編譯后的代碼**
其實就是MapStruct幫我們實現了映射接口,然后我們調用自定義默認方法即可。
```java
public class CountryMapperImpl implements CountryMapper {
public CountryMapperImpl() {
}
}
```
- MapStruct屬性映射
- MapStruct是什么
- maven依賴
- 基本映射
- 字段名不一致的映射
- 字段類型不一致的映射
- 基本數據類型轉換
- 日期格式轉換
- 使用表達式轉換
- 枚舉映射
- 多個源類的映射
- 集合的映射
- 添加自定義映射方法
- 映射前后
- 添加默認值
- 映射異常處理
- SpringDataJPA
- SpringDataJPA是什么
- 與JPA、Hibernate的關系
- 環境搭建
- 簡單CURD操作
- 內部原理
- 主鍵生成策略
- 聯合主鍵
- 查詢方式
- 方法命名規則查詢
- 限制查詢結果查詢
- 注解@Query查詢
- 命名參數查詢
- SpEL表達式查詢
- 原生查詢
- 更新與刪除
- Specification動態查詢
- 核心接口
- 查詢例子
- 分頁查詢與排序
- 多表查詢
- 一對一查詢
- 一對多查詢
- 多對多查詢
- 注意事項
- Specification多表查詢
- @Query多表查詢
- 只查詢指定字段
- 級聯操作
- 加載規則