日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

MapStruct 常用操作

發布時間:2024/9/27 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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 常用操作的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。