MapStruct 映射工具


MapStruct 映射工具


MapStruct 映射工具


 本篇主要講解MapStruct 一款映射工具,只需簡單的定義一個Mapper接口,在編譯期間,MapStruct將生成此接口的實現,據說MapStruct性能最高是Spring的CopyProperties的10倍,與手工編寫映射代碼相比,MapStruct通過生成繁瑣且易於編寫的代碼來節省時間。遵循約定優於配置方法,MapStruct使用合理的默認值,但在配置或實現特殊行為時會採取措施。


 1.引入MapStruct的依賴


<code>        <dependency>            <groupid>org.mapstruct/<groupid>            <artifactid>mapstruct-jdk8/<artifactid>            <version>1.3.0.Final/<version>        /<dependency>        <dependency>            <groupid>org.mapstruct/<groupid>            <artifactid>mapstruct-processor/<artifactid>            <version>1.3.0.Final/<version>        /<dependency>/<code>

 2.使用MapStruct


  2.1 創建實體Entity


<code>    @Data    @Entity    @EntityListeners(AuditingEntityListener.class)    public class BlogInfo {/<code>
<code>      @Id      @GeneratedValue(strategy = GenerationType.IDENTITY)      private Long id;/<code>
<code>    /**     * 博客標題     */      @Field(analyzer = "ik_max_word"  , type = FieldType.Text , searchAnalyzer = "ik_max_word")      private String blogTitle;    /**     * 博客內容     */      @Column(columnDefinition = "text")      private String blogContent;/<code> 
<code>    /**     * 博客簡要     */      private String blogShortContent;/<code>
<code>    }    /<code>

  2.2 創建Vo對象或者DTO對象


<code>    @Data    @Accessors(chain = true)    public class BlogInfoVo {/<code>
<code>      private Long id;/<code>
<code>    /**     * 博客標題     */      private String blogTitle;    /**     * 博客內容     */      private String blogContent;/<code>
<code>    /**     * 博客簡要     */      private String blogShortContent;/<code>
<code>    }/<code>

  2.3 創建一個Mapper接口

  1.類名上面添加@Mapper註解,使用Mybatis的小夥伴要注意導入的是MapStruct的@Mapper 不要混淆  2.寫上轉化方法,如果有屬性 字段 或者 類型 不同可以使用 @Mappings指定  3.當需要從字符串Date轉成日期Date時候需要提供一個 uses = DateMapper.class

<code>    /**     * Media Converter     *     * @author johnny     * @create 2019-11-08 上午11:20     **//<code>
<code>    @Mapper(uses = DateMapper.class )    public interface BlogInfoConverter {/<code>
<code>      BlogInfoConverter INSTANCE = Mappers.getMapper(BlogInfoConverter.class);/<code>
<code>        @Mappings({                @Mapping(source = "createDate", target = "createDate" ,dateFormat = "yyyy-MM-dd"),            //表示從BlogInfo的createDate 轉成 BlogInfoVo的createDate 使用 yyyy-MM-dd進行轉換                @Mapping(source = "createTime" , target = "createTime" , dateFormat = "yyyy-MM-dd"),                @Mapping(target = "anchors" , ignore = true)    })        BlogInfoVo domain2vo(BlogInfo blogInfo);/<code>
<code>    //這裡包含 從String類型的Date轉換成日期類型的Date,就需要使用 uses=DateMapper.class        BlogInfo vo2domain(BlogInfoVo blogInfoVo);}/<code>

  貼出來:可以直接粘貼使用  DateMapper

<code>    public class DateMapper {/<code>
<code>      public String asString(Date date) {        return date != null ? new SimpleDateFormat("yyyy-MM-dd")                .format(date) : null;      }/<code>
<code>      public Date asDate(String date) {        try {            return date != null ? new SimpleDateFormat("yyyy-MM-dd")                    .parse(date) : null;        } catch (ParseException e) {            throw new RuntimeException(e);        }      }    }/<code>

  2.4 調用

  BlogInfoConverter.INSTANCE.domain2vo

<code>    @Override    public List<bloginfovo> queryByTypeId(Integer typeId) {        List<bloginfovo> list = new ArrayList<>();        blogInfoRepository.findByBlogTypeId(typeId).stream().forEach(blogInfo -> {            list.add(BlogInfoConverter.INSTANCE.domain2vo(blogInfo));        });        return list;    }/<bloginfovo>/<bloginfovo>/<code>

 總結

  本篇主要講解MapStruct的基本使用方法,裡面的很多其他的用法我也還沒深入探究,不過我本是很喜歡使用MapStruct的


個人博客網站 https://www.askajohnny.com 歡迎訪問!

本文由博客一文多發平臺 https://openwrite.cn?from=article_bottom 發佈!


分享到:


相關文章: