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

    @Overridepublic 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 发布!

mybatis date类型映射_MapStruct 映射工具相关推荐

  1. mybatis date类型映射_Mybatis中类型映射处理器详解

    上一篇梳理了Configuration初始化分析,今天继续typeHandlers部分. 数据库厂商标识 接上一篇文章分析,下一个解析的是databaseIdProvider节点,这个节点好理解,从字 ...

  2. mybatis date类型比较,起始时间或结束时间。

    如果数据库是时间类型而且你传的值也是时间类型,可以直接比较. 2023-2-17 更新 可以起始时间和结束时间一起判断 <if test="startTime != null and ...

  3. 映射date类型_JPA 日历映射到日期示例

    以下部分显示如何将java.util.Calendar映射到数据库日期类型. @Temporal(TemporalType.DATE) private java.util.Calendar dob; ...

  4. Java 时间和日期类型的 Hibernate 映射

    以下情况下必须显式指定 Hibernate 映射类型 一个 Java 类型可能对应多个 Hibernate 映射类型. 例如: 如果持久化类的属性为 java.util.Date 类型, 对应的 Hi ...

  5. mybatis入门基础(四)----输入映射和输出映射

    阅读目录 一:输入映射 二:输出映射 回到顶部 一:输入映射 通过parameterType指定输入参数的类型,类型可以是简单类型.hashmap.pojo的包装类型. 1.1.传递pojo的包装对象 ...

  6. 实习笔记 —— MyBatis III (输入/输出映射)

    系列文章目录 实习笔记 -- Spring基础 实习笔记 -- IOC反转控制(xml配置文件 + 注解) 实习笔记 -- AOP开发I 实习笔记-- AOP开发II(AOP中Advice的类型) 实 ...

  7. MyBatis官方文档-XML 映射文件

    最近更新: 15 七月 2019|版本: 3.5.2 文章目录 XML 映射文件 insert, update 和 delete sql 结果映射 高级结果映射 结果映射(resultMap) id ...

  8. mybatis学习笔记(7)-输出映射

    2019独角兽企业重金招聘Python工程师标准>>> mybatis学习笔记(7)-输出映射 标签: mybatis [TOC] 本文主要讲解mybatis的输出映射. 输出映射有 ...

  9. 框架:Mybatis开发规范及输入输出映射配置时注意事件

    程序员需要编写mapper.xml映射文件 程序员编写mapper接口需要遵循一些开发规范,mybatis可以自动生成mapper接口实现类代理对象. 1.开发规范: 1.在mapper.xml中na ...

最新文章

  1. 字节终面:CPU 是如何读写内存的?
  2. 前端高效开发必备的 js 库梳理
  3. Linux:文件描述符
  4. sqlserver2008安装报错 “Previous releases of Microsoft Visual Studio 2008″ failed.
  5. Java中使用foreach带来的一些问题
  6. Tomcat源码下载地址
  7. CnOpenData中国上市公司投资者关系管理数据
  8. NBIoT接收十六进制数据格式转化
  9. 6. 抹平差异,统一类型转换服务ConversionService
  10. Microsoft XBOX 360 Project Natal 体感装置2010年6月15正式发布产品正式命名为“Kinect”...
  11. 计算机微博实验报告,网络信息交流的工具与模式(实验报告).doc
  12. mac 命令行查看DNS
  13. 双重否定的翻译 百度翻译 VS. 谷歌翻译
  14. pd.read_excel出现xlrd.biffh.XLRDError: Excel xlsx file; not supported解决方案
  15. CS入门学习笔记3-廖雪峰python教程-函数
  16. 【tensorflow】生成.pb文件
  17. 从本质矩阵恢复相机矩阵
  18. 转发一篇好文:36氪翻译自medium的文章: 读书没有 KPI:为什么坚持“一年读 100 本书”没用?...
  19. 理解微波射频中的特性阻抗、VSWR 和反射系数
  20. Delphi 如何操作Excel

热门文章

  1. 一篇博客带你轻松应对java面试中的多线程与高并发
  2. HttpClient 如何设置超时时间
  3. 怎么查电脑系统版本_电脑系统垃圾清理利器,专业、小巧且免费,有这一个就够了...
  4. 合并报表编制采用的理论_合并报表操作的整体思路梳理
  5. web签名验证程序【跨服务器、中文字符签名方法】-php为例
  6. python字典输出_Python字典/循环输出
  7. c#写图像tif gdal_C# GDAL显示TIF
  8. python用户登录_【python】实例-用户登录系统
  9. 计算机考研择校分析,上海地区计算机考研择校分析
  10. 黑群晖docker清理缓存_群晖NAS后台容量查询及文件删除(附download station缓存删除方法)...