java map 结构体_java之mapstruct的应用

一、MapStruct是一个代码生成器,简化了不同的Java Bean之间映射的处理,所以映射指的就是从一个实体变化成一个实体。例如我们在实际开发中,DAO层的实体和一些数据传输对象(DTO),大部分属性都是相同的,只有少部分的不同,通过mapStruct,可以让不同实体之间的转换变的简单。我们只需要按照约定的方式进行配置即可。

MapStruct是一个可以处理注解的Java编译器插件,可以在命令行中使用,也可以在IDE中使用。MapStruct有一些默认配置,但是也为用户提供了自己进行配置的途径。

缺点就是这玩意在使用工具自带的编译器是,不会生成实现类,需要通过maven的方式来进行编辑,才会生成实现类,总体上面来说还是很好用的。相对于BeanUtil等,简介性还是很明显的。目前MapStruct的版本基本都是固定了,可以自己尝试着弄一下。

二、用到MapStruct需要一个依赖包和一个插件(pom.xml的官方配置)

org.mapstruct

mapstruct

1.2.0.Final

org.apache.maven.plugins

maven-compiler-plugin

3.7.0

1.8

1.8

org.mapstruct

mapstruct-processor

1.2.0.Final

三、我这里谢了一个简单的例子供参考

packagecom.troy.jpa.service.mapper;importcom.troy.jpa.dto.UserDTO;importcom.troy.jpa.entity.User;importcom.troy.jpa.service.util.AgeUtil;importorg.mapstruct.InheritConfiguration;importorg.mapstruct.Mapper;importorg.mapstruct.Mapping;importorg.mapstruct.Mappings;importjava.util.List;

@Mapper(componentModel= "spring", uses = {AgeUtil.class})public interfaceUserMapper {

@Mappings({

@Mapping(source= "age", target = "age", qualifiedByName = {"AgeUtil", "ageAdd"}),

})

UserDTO userToDTO(User user);

@InheritConfiguration

User DTOToUser(UserDTO userDTO);

List userListToDTOList(Listusers);

}

packagecom.troy.jpa.service.util;importorg.springframework.stereotype.Component;importjavax.script.ScriptEngine;importjavax.script.ScriptEngineManager;importjavax.script.ScriptException;

@Componentpublic classAgeUtil {public String ageAdd(String age) throwsScriptException {

ScriptEngineManager engineManager= newScriptEngineManager();

ScriptEngine engine= engineManager.getEngineByName("JavaScript");

Object eval= engine.eval(age + "+1");returneval.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我这里不一一介绍。我提到的主要是比较常用的写法,其他很多方式。可能会用到。但是可以作为自己学习的开始。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/441089.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【CodeForces - 340D】Bubble Sort Graph (思维,nlogn最长上升子序列类问题)

题干: Iahub recently has learned Bubble Sort, an algorithm that is used to sort a permutation with n elements a1, a2, ..., an in ascending order. He is bored of this so simple algorithm, so he invents his own graph. The graph (lets call it G) i…

java nio有哪些功能_如何真正理解java中的NIO?

从历史进程来看可能会比较好早期计算机性能较差的情况下反正你同时也没法同时处理很多io,不如开一个就阻塞在那边,程序员编程也省事,别的花里胡哨的骚操作还未必有这种方式性能高,这个叫做bio后面cpu内存性能上去了,磁…

【LightOJ - 1031】Easy Game (区间dp,博弈)

题干: You are playing a two player game. Initially there are n integer numbers in an array and player A and B get chance to take them alternatively. Each player can take one or more numbers from the left or right end of the array but cannot tak…

java web svn_如何搭建svnadmin,一个简单的svnWEB页面

Svn Admin是一个Java开发的管理Svn服务器的项目用户的web应用。安装好Svn服务器端好,把Svn Admin部署好,就可以通过web浏览器管理Svn的项目,管理项目的用户,管理项目的权限。使得管理配置Svn简便,再也不需要每次都到服…

【牛客 - 301哈尔滨理工大学软件与微电子学院第八届程序设计竞赛同步赛(高年级)】小乐乐下象棋(记忆化搜索dp,dfs)

题干: 小乐乐一天天就知道玩,这一天又想玩象棋。 我们都知道马走日。 现在给定一个棋盘,大小是n*m,把棋盘放在第一象限,棋盘的左下角是(0,0),右上角是(n - 1, m - 1); 小乐乐想知道,一个马从左下角(0, 0)开始&#…

java 递归 时间复杂度_递归到底是怎么实现的?它的时间复杂度怎么算?

递归到底是个啥?常听见的一句话就是:自己调用自己。按照这个说法,写个简单的递归自己推导一下的确可以,但是总是有点绕,推着推着自己把自己陷进去了。递归函数运行时,实际上会进行一个压栈(思考栈的特点&am…

【牛客 - 301哈尔滨理工大学软件与微电子学院第八届程序设计竞赛同步赛(高年级)】小乐乐搭积木(状压dp)

题干&#xff1a; 小乐乐想要给自己搭建一个积木城堡。 积木城堡我们假设为n*m的平面矩形。 小乐乐现在手里有1*2&#xff0c;2*1两种地砖。 小乐乐想知道自己有多少种组合方案。 输入描述: 第一行输入整数n,m。(1<n,m<10) 输出描述: 输出组合方案数。 示例1 输…

Java 重定向 无法写入_java IO 文件读入,写入,重定向

Java代码 packagestar20110526;importjava.io.BufferedInputStream;importjava.io.BufferedOutputStream;importjava.io.BufferedReader;importjava.io.File;importjava.io.FileInputStream;importjava.io.FileNotFoundException;importjava.io.FileOutputStream;importjava.io…

【HDU - 1078】FatMouse and Cheese (记忆化搜索dp)

题干&#xff1a; FatMouse has stored some cheese in a city. The city can be considered as a square grid of dimension n: each grid location is labelled (p,q) where 0 < p < n and 0 < q < n. At each grid location Fatmouse has hid between 0 and 10…

获取excel名称java_使用Apache POI获取大型Excel文件的Excel工作表名称

小编典典为了显示Gagravarr的评论可能意味着什么&#xff1a;该XSSFReader包含方法XSSFReader.getSheetsData其中“返回一个迭代器&#xff0c;这将让你在把所有的不同的表&#xff0c;每个表的InputStream中只有打开时开始迭代器牵强。这是给你的时候&#xff0c;每个做关闭In…

【CodeForces - 298C】Parity Game (思维,有坑)

题干&#xff1a; You are fishing with polar bears Alice and Bob. While waiting for the fish to bite, the polar bears get bored. They come up with a game. First Alice and Bob each writes a 01-string (strings that only contain character "0" and &q…

java求小数高精度_浅谈Java中的高精度整数和高精度小数

在实际编码中&#xff0c;会遇到很多高精度的事例&#xff0c;比如&#xff0c;在计算金钱的时候就需要保留高精度小数&#xff0c;这样计算才不会有太大误差&#xff1a;在下面的代码中&#xff0c;我们验证了&#xff0c;当两个float型的数字相加&#xff0c;得到的结果和我们…

【CodeForces - 298B 】Sail (模拟,题意)

题干&#xff1a; The polar bears are going fishing. They plan to sail from (sx, sy) to (ex, ey). However, the boat can only sail by wind. At each second, the wind blows in one of these directions: east, south, west or north. Assume the boat is currently…

java中能构成循环的语句_《编程导论(Java)#183;3.2.4 循环语句》

本文全然复制《编程导论(Java)3.2.4 循环语句》的内容。除【】中的说明文字。请阅读和比較其它编程教材。我知道。假设我是一个刚開始学习的人&#xff0c;《编程导论(Java)》非常不适合自学。建议同学们阅读时&#xff0c;一定选择一本其它的书同一时候看&#xff0c;或上网。…

【CodeForces - 340B 】Maximal Area Quadrilateral (计算几何,枚举,有坑)

题干&#xff1a; Iahub has drawn a set of n points in the cartesian plane which he calls "special points". A quadrilateral is a simple polygon without self-intersections with four sides (also called edges) and four vertices (also called corners)…

php网站的编辑器,5款适合PHP使用的HTML编辑器推荐

概述Web开发中&#xff0c;很多地方都会用到HTML编辑器(富文本编辑器)&#xff0c;我也用过几种&#xff0c;如UEditor、CkEditor等。这几天看了几篇文章&#xff0c;都是关于HTML编辑器的&#xff0c;写个文章记录下。推荐的编辑器simditor这个编辑器是前几天刚看到的&#xf…

【牛客 - 301哈尔滨理工大学软件与微电子学院第八届程序设计竞赛同步赛(高年级 )】小乐乐和25(模拟,技巧)

题干&#xff1a; 小乐乐特别喜欢25这个数字&#xff0c;他想把所有的数字都变成25的倍数。 现在小乐乐得到一个数字&#xff0c;想问问你最少用几次操作才可以把这个数字改造成25的倍数。 对于一次操作我们可以把相邻的两位做交换&#xff0c;比如123经过一次操作之后就可以…

怎么表示一个PHP语句块,php switch语句多个值匹配同一代码块应用示例

先说说switch()语句的格式switch(表达式){case 匹配1&#xff1a;当匹配1和表达式匹配成功执行的代码;break;case 匹配2&#xff1a;当匹配2和表达式匹配成功执行的代码;break;default&#xff1a;如果case语句没有与表达式成功所执行的代码;}理解 switch 是怎样执行的非常重要…

php查找顶级分类,php 无限级分类 获取顶级分类ID,php顶级_PHP教程

php 无限级分类 获取顶级分类ID&#xff0c;php顶级有这样一个表&#xff0c;id是分类的ID&#xff0c;name是分类名称&#xff0c;pid是上级分类的ID。现在有个分类ID&#xff0c;程序要找到它上级的上级的上级……分类的ID&#xff0c;简单说就是找出顶级分类的ID。比如“新鲜…

【POJ - 2392】Space Elevator (dp,优秀的背包问题)

题干&#xff1a; The cows are going to space! They plan to achieve orbit by building a sort of space elevator: a giant tower of blocks. They have K (1 < K < 400) different types of blocks with which to build the tower. Each block of type i has heigh…