文章目录

    • @[toc]
  • 使用
    • 由Spring代理
    • 不由spring代理
  • 其它属性
    • ignore
  • 原理

Json工具是通过序列化反序列化来实现的,性能低下。

MapStruct是通过getter、setter来实现的。

        <!--MapStruct依赖--><!-- https://mvnrepository.com/artifact/org.mapstruct/mapstruct-jdk8 --><dependency><groupId>org.mapstruct</groupId><artifactId>mapstruct-jdk8</artifactId><version>1.0.0.Final</version></dependency><!-- https://mvnrepository.com/artifact/org.mapstruct/mapstruct-processor --><dependency><groupId>org.mapstruct</groupId><artifactId>mapstruct-processor</artifactId><version>1.0.0.Final</version></dependency>

使用

@Data
@Builder
public class User {private String uname;private Integer uid;private String uaddr;
}
@Data
@Builder
@ToString
@AllArgsConstructor
@NoArgsConstructor
public class UserDto {private String name;private  Integer id;private Integer updateUserId;}

由Spring代理

import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.factory.Mappers;@Mapper(componentModel = "spring")  //表示由Spring代理
public interface UserMapping {//UserMapping USERMAPOING = Mappers.getMapper(UserMapping.class);   //可以不要/*
将user的uname映射成目标类userDto的name字段
...
*/@Mapping(target = "name",source = "uname")@Mapping(target = "id",source = "uid")UserDto userToUserDto(User user);
}

使用

    @Resourceprivate UserMapping userMapping;public void func(){User user = User.builder().uname("zhangsan").uid(22).build();UserDto userDto = userMapping.userToUserDto(user);}

不由spring代理

@Mapper
public interface UserMapping {UserMapping USERMAPOING = Mappers.getMapper(UserMapping.class);@Mapping(target = "name",source = "uname")@Mapping(target = "id",source = "uid")UserDto userToUserDto(User user);
}
    @Testpublic void t1(){User user = User.builder().uname("zhangsan").uid(22).build();UserDto userDto = UserMapping.USERMAPOING.userToUserDto(user);userDto.setUpdateUserId(111);log.info(userDto.toString());}

其它属性

ignore

@Mapping(target = “age”, ignore = true)
添加了ignore,表示不会对该属性做映射;


原理

MapStruct生成了mapping的实现类,通过调用get\set实现;

@Generated(value = "org.mapstruct.ap.MappingProcessor",date = "2021-04-30T12:58:59+0800",comments = "version: 1.0.0.Final, compiler: javac, environment: Java 1.8.0_211 (Oracle Corporation)"
)
@Component
public class UserMappingImpl implements UserMapping {@Overridepublic UserDto userToUserDto(User user) {if ( user == null ) {return null;}UserDto userDto = new UserDto();userDto.setName( user.getUname() );userDto.setId( user.getUid() );return userDto;}
}

MapStruct、ignore相关推荐

  1. mysql insert delayed_mysql insert的几点操作(DELAYED 、IGNORE、ON DUPLICATE KEY UPDATE )

    INSERT语法 INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE] [INTO] tbl_name [(col_name,...)] V ...

  2. MyBatis Plus Generator 代码生成器 v3.5.x 案例,含校验、MapStruct、Swagger、QO、VO,自定义 FreeMarker 模板引擎

    v3.5.3.v3.5.3.1 详情请点击 v3.5.1 代码生成器 import com.baomidou.mybatisplus.annotation.IdType; import com.bao ...

  3. 对象拷贝之Apache BeanUtils、Spring的BeanUtils、Mapstruct、BeanCopier、PropertieyUtils对比(深拷贝)

    大多时候时候使用的是Apache或Spring``BeanUtils,今天,我们来看一下一个更高效的属性拷贝方式:BeanCopier. https://github.com/cglib/cglib ...

  4. mysql ignore index_mysql use index、ignore index、force index用法

    原创你去了哪里 最后发布于2019-10-18 14:05:48 阅读数 121  收藏 展开 1:use index:在你查询语句表名的后面,添加use index来提供你希望mysql去参考的索引 ...

  5. MYSQL:Inert、IGNORE、REPLACE INTO的功能与用法

    最后咱们通过简单的例子说明下: insert into表示插入数据,数据库会检查主键,如果出现重复会报错:  replace into表示插入替换数据,需求表中有PrimaryKey,或者unique ...

  6. mysql use index用法_mysql use index、ignore index、force index用法

    原创你去了哪里 最后发布于2019-10-18 14:05:48 阅读数 121  收藏 展开 1:use index:在你查询语句表名的后面,添加use index来提供你希望mysql去参考的索引 ...

  7. org.mapstruct:mapstruct 包的使用

    最近发现一个特别好用的包,org.mapstruct:mapstruct,它是专门用来处理 domin 实体类与 model 类的属性映射的 它的优势: 很多项目大量映射的方式通过手动get.set, ...

  8. Java中实用的实体类映射工具MapStruct

    1 vo.po.dto.bo.pojo.entity.mode的区别 在介绍MapStruct先说一下java中vo.po.dto.bo.pojo.entity.mode的区别是什么. 1)vo(va ...

  9. 【转】AfxMessageBox、MessageBox、::MessageBox的区别

    AfxMessageBox的函数原型 int AfxMessageBox( LPCTSTR lpszText, UINT nType = MB_OK, UINT nIDHelp = 0 ); int ...

最新文章

  1. 计算机二级应用题改卷,全国计算机等级考试二级Python语言程序设计模拟试卷B卷综合应用题-Go语言中文社区...
  2. pku 3087 Shuffle'm Up 说的是bfs,其实就是个模拟
  3. 微信小游戏爆款秘笈 数据库MongoDB攻略篇
  4. mysql英文版怎么调中文_MYSQL 5.6安装设置中英文翻译
  5. 物联网网络编程和web编程
  6. Delphi自动提交网页表单和获取框架网页源码
  7. 【数据分析】太秀了!用Excel也能实现和Python数据分析一样的功能!
  8. 自定义的Android EditText
  9. 如何在TypeScript中使用JS类库
  10. 崩坏3服务器故障 临时维护,崩坏3 11.5游戏故障处理及补偿说明
  11. 编程师代码G都喜欢的|细致场景森系插画手机壁纸
  12. SQLSTATE[HY000] [2013] Lost connection to MySQL...
  13. java程序片的元素符号_UML 中的 基本画图元素及符号
  14. QT5实现摄像头预览与扑捉图像
  15. 《学术小白的学习之路 02》情感分析02 之基于大连理工情感词典的情感分析和情绪计算
  16. 教你一步步实现一个虚拟摇杆
  17. WebSocket多人聊天室
  18. 计算机里折叠项无法删除,删除右键多余菜单_如何去除右键菜单中多余选项?...
  19. PS无法拖拽置入图片解决办法
  20. FPGA 之 SOPC 系列 汇总篇

热门文章

  1. 圆与圆的位置关系题目含答案_圆与圆的位置关系课时练习题(附答案)
  2. python swapcase用法_python中swapcase是什么意思
  3. 如何彻底关闭windows10自动更新,禁用Windows Update
  4. 基础算法一:大整数模积运算
  5. http服务器的实现
  6. stm32控制步进电机
  7. Object,byte[],ByteBuffer之间的转换。
  8. Linux7浏览器打不开网页,centos7浏览器打不开网页
  9. 如何搭建一个自己的网站-服务器篇
  10. 实验四 数据查询——简单查询 Sql Server数据库实验