java之mapstruct的应用
一、MapStruct是一个代码生成器,简化了不同的Java Bean之间映射的处理,所以映射指的就是从一个实体变化成一个实体。例如我们在实际开发中,DAO层的实体和一些数据传输对象(DTO),大部分属性都是相同的,只有少部分的不同,通过mapStruct,可以让不同实体之间的转换变的简单。我们只需要按照约定的方式进行配置即可。
MapStruct是一个可以处理注解的Java编译器插件,可以在命令行中使用,也可以在IDE中使用。MapStruct有一些默认配置,但是也为用户提供了自己进行配置的途径。
缺点就是这玩意在使用工具自带的编译器是,不会生成实现类,需要通过maven的方式来进行编辑,才会生成实现类,总体上面来说还是很好用的。相对于BeanUtil等,简介性还是很明显的。目前MapStruct的版本基本都是固定了,可以自己尝试着弄一下。
官方api文档地址:http://mapstruct.org/documentation/stable/reference/html/
二、用到MapStruct需要一个依赖包和一个插件(pom.xml的官方配置)
<dependencies>
<dependency>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct</artifactId>
<version>1.2.0.Final</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
<configuration>
<source>1.8</source> <!-- or higher, depending on your project -->
<target>1.8</target> <!-- or higher, depending on your project -->
<annotationProcessorPaths>
<path>
<groupId>org.mapstruct</groupId>
<artifactId>mapstruct-processor</artifactId>
<version>1.2.0.Final</version>
</path>
</annotationProcessorPaths>
</configuration>
</plugin>
</plugins>
</build>
三、我这里谢了一个简单的例子供参考
package com.troy.jpa.service.mapper; import com.troy.jpa.dto.UserDTO;
import com.troy.jpa.entity.User;
import com.troy.jpa.service.util.AgeUtil;
import org.mapstruct.InheritConfiguration;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.Mappings; import java.util.List; @Mapper(componentModel = "spring", uses = {AgeUtil.class})
public interface UserMapper { @Mappings({
@Mapping(source = "age", target = "age", qualifiedByName = {"AgeUtil", "ageAdd"}),
})
UserDTO userToDTO(User user); @InheritConfiguration
User DTOToUser(UserDTO userDTO); List<UserDTO> userListToDTOList(List<User> users); }
package com.troy.jpa.service.util; import org.springframework.stereotype.Component; import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException; @Component
public class AgeUtil { public String ageAdd(String age) throws ScriptException {
ScriptEngineManager engineManager = new ScriptEngineManager();
ScriptEngine engine = engineManager.getEngineByName("JavaScript");
Object eval = engine.eval(age + "+1");
return eval.toString();
}
}
说明:
1)在接口上面加入@Mapper,就可以实现实体和DTO之间的装换
2)componentModel 是加入模块,一般都是spring容器,在实现类中会加入@Component注解
3)uses引入外部类,用于实体和DTO之间的工具类
4) 多个@Mapping在@Mappings里面编写,也可以单个编写@Mapping。如果实体和DTO之间数据字段一样,可以不加任何注解
5)qualifiedByName 的用法,主要是用来转换特殊数据处理的自定义方式。{}中第一个代表bean,第二种达标方法。
6)@InheritConfiguration 的用法,也就是反向映射。当source,target字段不一样,写第一个。其它的映射可以不用再写@Mapping,直接加入@InheritConfiguration注解即可
7)@Mapping 中的ignore 赋值 true可以忽略某个字段(这个主要是在字段相同,但是类型不同,并且不能装换的时候用)
四、当然我这里主要是写的几种常用的用法,mapstruct中还有其他的写法,和api我这里不一一介绍。我提到的主要是比较常用的写法,其他很多方式。可能会用到。但是可以作为自己学习的开始。
java之mapstruct的应用的更多相关文章
- Spark案例分析
一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /* ...
- 推荐一个 Java 实体映射工具 MapStruct
声明: 1.DO(业务实体对象),DTO(数据传输对象). 2.我的代码中用到了 Lombok ,不了解的可以自行了解一下,了解的忽略这条就好. 在一个成熟的工程中,尤其是现在的分布式系统中,应用与应 ...
- 业务代码的救星——Java 对象转换框架 MapStruct 妙用
简介 在业务项目的开发中,我们经常需要将 Java 对象进行转换,比如从将外部微服务得到的对象转换为本域的业务对象 domain object,将 domain object 转为数据持久层的 dat ...
- Java实体映射工具MapStruct的使用
官网地址:http://mapstruct.org/ MapStruct 是一个代码生成器,简化了不同的 Java Bean 之间映射的处理,所谓的映射指的就是从一个实体变化成一个实体.例如我们在实际 ...
- mapstruct解放Java对象转换
摘要 当前web后端开发,都是使用多层工程结构,需要在VO,BO,DTO,DO等各种数据结构中相互转换.这些转换代码都是些比较简单的字段映射,类型转换,重复性工作比较高,可以使用一些工具解放我们的双手 ...
- 【工具库】Java实体映射工具MapStruct
一.什么是MapStruct? MapStruct是用于代码中JavaBean对象之间的转换,例如DO转换为DTO,DTO转换为VO,或Entity转换为VO等场景,虽然Spring库和 Apache ...
- Java实体映射工具MapStruct使用详解
1.序 通常在后端开发中经常不直接返回实体Entity类,经过处理转换返回前端,前端提交过来的对象也需要经过转换Entity实体才做存储:通常使用的BeanUtils.copyProperties方法 ...
- Java编码辅助工具:Mapstruct—— Java对象转换框架
项目开发中,业务分层会涉及不同类型的Bean之间需要相互转换,如PO与DTO之间,PO与VO之间等.手动编码setter/getter各个对应属性,会显得臃肿繁琐.通过Mapstruct框架可简单方便 ...
- Java资源大全中文版(Awesome最新版)
Awesome系列的Java资源整理.awesome-java 就是akullpp发起维护的Java资源列表,内容包括:构建工具.数据库.框架.模板.安全.代码分析.日志.第三方库.书籍.Java 站 ...
随机推荐
- zabbix中监控某个进程的shell脚本
#!/bin/sh ret_ok= ret_warn= ret_critical= ret_unknown= info_count=`ps -aux | awk 'BEGIN {cnt=0} /[^- ...
- html 入门2-表
html 入门-列表 表格 表单 一.表标签 1,无序列表 ( ul:li ) 注意:代码排版必须要层次分明 2,有序列表 (ol:li) 3,自定义列表 (dl:li) 二.表格标签 1,tabl ...
- Angular单元测试
https://angular.github.io/protractor/#/http://jasmine.github.io/2.4/introduction.html 测试程序有两种主要方法:端对 ...
- Homebrew/Linuxbrew 安装常有工具
Homebrew https://brew.sh/ Install: /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent ...
- Http协议中Cookie详细介绍
Cookie总是保存在客户端中,按在客户端中的存储位置,可分为内存Cookie和硬盘Cookie.内存Cookie由浏览器维护,保存在内存中,浏览器关闭后就消失了,其存在时间是短暂的.硬盘Cookie ...
- 转载:【Oracle 集群】RAC知识图文详细教程(八)--Oracle 11G RAC数据库安装
文章导航 集群概念介绍(一) ORACLE集群概念和原理(二) RAC 工作原理和相关组件(三) 缓存融合技术(四) RAC 特殊问题和实战经验(五) ORACLE 11 G版本2 RAC在LINUX ...
- 前端常用框架和js插件 UI组件等
前言:写这个随笔,是记录一下工作以来用到的各种框架.以免日后忘记: JS库: 1. jquery.js 2. zepto.js ----jquery的精简版,专门用于手机上的,但是zepto主体默认是 ...
- 201621123006 《Java程序设计》第13周学习总结
1. 本周学习总结 以你喜欢的方式(思维导图.OneNote或其他)归纳总结多网络相关内容. 2. 为你的系统增加网络功能(购物车.图书馆管理.斗地主等)-分组完成 为了让你的系统可以被多个用户通过网 ...
- 20181009-3 选题 Scrum立会报告+燃尽图 02
Scrum立会报告+燃尽图(02)选题 此作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2191 一.小组介绍 组长:刘莹莹 ...
- .net 应用程序 发布上线注意事项
生产环境发布时,对应的程序目录必须新建当日rar压缩包进行备份生产环境数据库发布时,必须创建存储过程的副本sql用于回滚,操作方式:F7调出对象资源管理器详细信息->选中所有存储过程->编 ...