mybatis date类型映射_MapStruct 映射工具

8f814ccd7552569074f0450ddd344af7.png

MapStruct 映射工具

本篇主要讲解MapStruct 一款映射工具,只需简单的定义一个Mapper接口,在编译期间,MapStruct将生成此接口的实现,据说MapStruct性能最高是Spring的CopyProperties的10倍,与手工编写映射代码相比,MapStruct通过生成繁琐且易于编写的代码来节省时间。遵循约定优于配置方法,MapStruct使用合理的默认值,但在配置或实现特殊行为时会采取措施。

1.引入MapStruct的依赖

        <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>

2.使用MapStruct

2.1 创建实体Entity

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

2.2 创建Vo对象或者DTO对象

    @Data
    @Accessors(chain = true)
    public class BlogInfoVo {
      private Long id;
    /**
     * 博客标题
     */
      private String blogTitle;
    /**
     * 博客内容
     */
      private String blogContent;
    /**
     * 博客简要
     */
      private String blogShortContent;
    }

2.3 创建一个Mapper接口

1.类名上面添加@Mapper注解,使用Mybatis的小伙伴要注意导入的是MapStruct的@Mapper 不要混淆 2.写上转化方法,如果有属性 字段 或者 类型 不同可以使用 @Mappings指定 3.当需要从字符串Date转成日期Date时候需要提供一个 uses = DateMapper.class

    /**
     * Media Converter
     *
     * @author johnny
     * @create 2019-11-08 上午11:20
     **/
    @Mapper(uses = DateMapper.class )
    public interface BlogInfoConverter {
      BlogInfoConverter INSTANCE = Mappers.getMapper(BlogInfoConverter.class);
        @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);
    //这里包含 从String类型的Date转换成日期类型的Date,就需要使用 uses=DateMapper.class
        BlogInfo vo2domain(BlogInfoVo blogInfoVo);
}

贴出来:可以直接粘贴使用 DateMapper

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

2.4 调用

BlogInfoConverter.INSTANCE.domain2vo

    @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;
    }

总结

本篇主要讲解MapStruct的基本使用方法,里面的很多其他的用法我也还没深入探究,不过我本是很喜欢使用MapStruct的

个人博客系统 https://www. askajohnny.com 欢迎访问!
本文由博客一文多发平台 OpenWrite 发布!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值