MapStruct 常用操作
生活随笔
收集整理的這篇文章主要介紹了
MapStruct 常用操作
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 一、快速入門
- 1. 簡介
- 2. 引入依賴
- 二、entity賦值vo
- 2.1. Product
- 2.2. ProductVO
- 2.3. mapper定義
- 2.4. 測試驗證
- 三、集合屬性賦值
- 3.1. mapper定義
- 3.2. 測試
- 四、2個對象整合屬性賦值
- 4.1. mapper定義
- 4.2. 測試
- 五、自定義類型轉換
- 5.1. mapper定義
- 5.2. 測試
一、快速入門
1. 簡介
MapStruct是滿足JSR269規范的一個Java注解處理器,用于為Java Bean生成類型安全且高性能的映射。它基于編譯階段生成get/set代碼,此實現過程中沒有反射,不會造成額外的性能損失。
您所要做的就是定義一個mapper接口(@Mapper),該接口用于聲明所有必須的映射方法。在編譯期間MapStruct會為該接口自動生成實現類。該實現類使用簡單的Java方法調用來映射source-target對象,在此過程中沒有反射或類似的行為發生。
2. 引入依賴
<properties><java.version>1.8</java.version><mapstruct.version>1.4.1.Final</mapstruct.version></properties><dependency><groupId>org.mapstruct</groupId><artifactId>mapstruct</artifactId><version>${mapstruct.version}</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.8.1</version><configuration><source>8</source><target>8</target><encoding>UTF-8</encoding><annotationProcessorPaths><!-- 必須要加, 否則生成不了 MapperImpl 實現類 --><path><groupId>org.mapstruct</groupId><artifactId>mapstruct-processor</artifactId><version>${mapstruct.version}</version></path><path><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.20</version></path><!-- 如果是 0.1.0 有可能出現生成了maptruct的實現類, 但該類只創建了對象, 沒有進行賦值 --><path><groupId>org.projectlombok</groupId><artifactId>lombok-mapstruct-binding</artifactId><version>0.2.0</version></path></annotationProcessorPaths></configuration></plugin></plugins></build>二、entity賦值vo
2.1. Product
@Data @AllArgsConstructor public class Product {private Integer productId;private String productName;private BigDecimal productPrice;private Integer productStatus; }2.2. ProductVO
@Data public class ProductVO {private Integer id;private String name;private BigDecimal price;private Boolean status; }2.3. mapper定義
@Mapper public interface ProductMapper {/*** 獲取該類自動生成的實現類的實例* 接口中的屬性都是 public static final 的 方法都是public abstract的*/ProductMapper mapper = Mappers.getMapper(ProductMapper.class);/*** 這個方法就是用于實現對象屬性復制的方法** @Mapping 用來定義屬性復制規則 source 指定源對象屬性 target指定目標對象屬性** @param user 這個參數就是源對象,也就是需要被復制的對象* @return 返回的是目標對象,就是最終的結果對象*/@Mappings({@Mapping(source = "productId",target = "id"),@Mapping(source = "productName",target = "name"),@Mapping(source = "productPrice",target = "price")})ProductVO pojo2vo(Product product);}2.4. 測試驗證
屬性不一致賦值
@Testpublic void test() {Product product = new Product(1,"電腦", new BigDecimal(6000),1);ProductVO productVO = ProductMapper.mapper.pojo2vo(product);System.out.println(productVO);}三、集合屬性賦值
3.1. mapper定義
@Mapper public interface ProductMapper {/*** 獲取該類自動生成的實現類的實例* 接口中的屬性都是 public static final 的 方法都是public abstract的*/ProductMapper mapper = Mappers.getMapper(ProductMapper.class);/*** 這個方法就是用于實現對象屬性復制的方法** @param product 這個參數就是源對象,也就是需要被復制的對象* @return 返回的是目標對象,就是最終的結果對象* @Mapping 用來定義屬性復制規則 source 指定源對象屬性 target指定目標對象屬性*/@Mappings({@Mapping(source = "productId",target = "id"),@Mapping(source = "productName",target = "name"),@Mapping(source = "productPrice",target = "price")})ProductVO pojo2vo(Product product);List<ProductVO> list2vo(List<Product> list);}3.2. 測試
@Testpublic void list(){List<Product> list = new ArrayList<>();for (int i = 0; i < 3; i++) {list.add(new Product(i,"電腦"+i,new BigDecimal(6000),1));}List<ProductVO> productVOS = ProductMapper.mapper.list2vo(list);for (ProductVO productVO : productVOS) {System.out.println(productVO);}}四、2個對象整合屬性賦值
4.1. mapper定義
@Mapper public interface ProductMapper {/*** 獲取該類自動生成的實現類的實例* 接口中的屬性都是 public static final 的 方法都是public abstract的*/ProductMapper mapper = Mappers.getMapper(ProductMapper.class);/*** 這個方法就是用于實現對象屬性復制的方法** @param product 這個參數就是源對象,也就是需要被復制的對象* @return 返回的是目標對象,就是最終的結果對象* @Mapping 用來定義屬性復制規則 source 指定源對象屬性 target指定目標對象屬性*/@Mappings({@Mapping(source = "productId",target = "id"),@Mapping(source = "productName",target = "name"),@Mapping(source = "productPrice",target = "price"),})ProductVO pojo2vo(Product product);List<ProductVO> list2vo(List<Product> list);/*** 多個參數中的值綁定** @param product 源1* @param category 源2* @return 從源1、2中提取出的結果*/@Mappings({@Mapping(source = "product.productName", target = "product"), //把product中的productName綁定到目標對象的product屬性中@Mapping(source = "category.categoryName", target = "category")//把category中的categoryName綁定到目標對象的category屬性中})OrderVO createOrder(Product product, Category category); }4.2. 測試
@Testpublic void order(){Product product = new Product(1, "電腦", new BigDecimal(6000),1);Category category = new Category("電子產品");OrderVO order = ProductMapper.mapper.createOrder(product, category);System.out.println(order);}五、自定義類型轉換
例如:查詢數據庫某個段值為0或者1,但是需求中,如果是1就返回true 0返回 false
例如:查詢數據庫某個段值為0或者1,但是頁面顯示男或者女
5.1. mapper定義
@Mapper public interface ProductMapper {/*** 獲取該類自動生成的實現類的實例* 接口中的屬性都是 public static final 的 方法都是public abstract的*/ProductMapper mapper = Mappers.getMapper(ProductMapper.class);/*** 這個方法就是用于實現對象屬性復制的方法** @param product 這個參數就是源對象,也就是需要被復制的對象* @return 返回的是目標對象,就是最終的結果對象* @Mapping 用來定義屬性復制規則 source 指定源對象屬性 target指定目標對象屬性*/@Mappings({@Mapping(source = "productId",target = "id"),@Mapping(source = "productName",target = "name"),@Mapping(source = "productPrice",target = "price"),@Mapping(source = "productStatus",target = "status",qualifiedByName = "convertStatus")})ProductVO pojo2vo(Product product);/*** 提供默認方法,方法自己定義,這個方法是我根據實際業務寫的* @return*/@Named("convertStatus")default Boolean convertStatus(Integer status){if(status == 1) {return true;}return false;}public abstract List<ProductVO> list2vo(List<Product> list);/*** 多個參數中的值綁定** @param product 源1* @param category 源2* @return 從源1、2中提取出的結果*/@Mappings({@Mapping(source = "product.productName", target = "product"), //把product中的productName綁定到目標對象的product屬性中@Mapping(source = "category.categoryName", target = "category")//把category中的categoryName綁定到目標對象的category屬性中})OrderVO createOrder(Product product, Category category); }5.2. 測試
@Testpublic void test() {Product product = new Product(1,"電腦", new BigDecimal(6000),1);ProductVO productVO = ProductMapper.mapper.pojo2vo(product);System.out.println(productVO);}總結
以上是生活随笔為你收集整理的MapStruct 常用操作的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Docker 操作手册
- 下一篇: jstat gc各参数含义