mapstruct实体类转换工具

使用mapstruct 进行不同类的实体转换 在pom文件添加 <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <org.mapstruct.version>1.3.0.Final</org.mapstruct.version&... 阅读详情

1、mapstruct环境搭建

1、导入依赖文件

	<properties>
        <org.mapstruct.version>1.4.2.Final</org.mapstruct.version>
    </properties>


<!--mapStruct依赖-->
     <dependency>
         <groupId>org.mapstruct</groupId>
         <artifactId>mapstruct</artifactId>
         <version>${org.mapstruct.version}</version>
     </dependency>
     <dependency>
         <groupId>org.mapstruct</groupId>
         <artifactId>mapstruct-processor</artifactId>
         <scope>provided</scope>
         <version>1.2.0.Final</version>
     </dependency>

<!--mapStruct相关插件-->
	<build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <source>1.8</source>
                    <!-- depending on your project -->
                    <target>1.8</target>
                    <!-- depending on your project -->
                    <annotationProcessorPaths>
                        <path>
                            <groupId>org.mapstruct</groupId>
                            <artifactId>mapstruct-processor</artifactId>
                            <version>${org.mapstruct.version}</version>
                        </path>
                        <!-- other annotation processors -->
                    </annotationProcessorPaths>
                </configuration></plugin></plugins>
    </build>

2、创建car类

package cn.itedus.lottery.test.mapstruct;

import cn.itedus.lottery.test.mapstruct.entity.Brand;

/**
 * @author cl
 */
public class Car {

    private String make;

    private int numberOfSeats;

    private Brand brand;

    public Car(String make, int numberOfSeats, Brand brand) {
        this.make = make;
        this.numberOfSeats = numberOfSeats;
        this.brand = brand;
    }

    public Car() {
    }

    public Car(String make, int numberOfSeats) {
        this.make = make;
        this.numberOfSeats = numberOfSeats;
    }

    public String getMake() {
        return make;
    }

    public int getNumberOfSeats() {
        return numberOfSeats;
    }

    public void setMake(String make) {
        this.make = make;
    }

    public void setNumberOfSeats(int numberOfSeats) {
        this.numberOfSeats = numberOfSeats;
    }

    public Brand getBrand() {
        return brand;
    }

    public void setBrand(Brand brand) {
        this.brand = brand;
    }

    @Override
    public String toString() {
        return "Car{" +
                "make='" + make + '\'' +
                ", numberOfSeats=" + numberOfSeats +
                ", brand=" + brand +
                '}';
    }
}


3、创建carDto类

package cn.itedus.lottery.test.mapstruct;

import cn.itedus.lottery.test.mapstruct.entity.Brand;

/**
 * @author cl
 */
public class CarDto {

    private String make;

    private int seatCount;

    private String type;

    private Brand carBrand;



    public CarDto() {
    }

    public CarDto(String make, int seatCount, String type) {
        this.make = make;
        this.seatCount = seatCount;
        this.type = type;
    }


    public String getMake() {
        return make;
    }

    public int getSeatCount() {
        return seatCount;
    }

    public String getType() {
        return type;
    }

    public void setMake(String make) {
        this.make = make;
    }

    public void setSeatCount(int seatCount) {
        this.seatCount = seatCount;
    }

    public void setType(String type) {
        this.type = type;
    }

    public CarDto(String make, int seatCount, String type, Brand carBrand) {
        this.make = make;
        this.seatCount = seatCount;
        this.type = type;
        this.carBrand = carBrand;
    }

    public Brand getCarBrand() {
        return carBrand;
    }

    public void setCarBrand(Brand carBrand) {
        this.carBrand = carBrand;
    }

    @Override
    public String toString() {
        return "CarDto{" +
                "make='" + make + '\'' +
                ", seatCount=" + seatCount +
                ", type='" + type + '\'' +
                ", carBrand=" + carBrand +
                '}';
    }
}


4、创建CarMapper类

package cn.itedus.lottery.test.mapstruct;

import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import org.mapstruct.Mappings;
import org.mapstruct.factory.Mappers;

/**
 * @author cl
 */
@Mapper
public interface CarMapper {

    CarMapper instantce = Mappers.getMapper(CarMapper.class);

    /**
     * Car -> CarDto转换
     *
     * 将源类Car中的字段numberOfSeats转换到CarDto中的seatCount字段中
     *
     * 表达式如果想自动提示的话,则需要安装mapstruct support插件
     *
     * @param car
     * @return
     */
    @Mapping(source = "numberOfSeats", target = "seatCount")
    @Mapping(target = "type",constant = "bbb")
    CarDto carToCarDto(Car car);


    @Mappings({@Mapping(source = "numberOfSeats", target = "seatCount"),
            @Mapping(target = "type",constant = "bbb"),
            @Mapping(source = "brand",target = "carBrand")
    })
    CarDto carToCarDtoV2(Car car);

}


5、测试类

public class MsTest {

    @Test
    public void test_ms(){
        CarMapper instantce = CarMapper.instantce;

        Car car = new Car();
        car.setMake("from");
        car.setNumberOfSeats(100);
        car.setBrand(new Brand("宝马"));
        CarDto carDto = instantce.carToCarDtoV2(car);
        System.out.println(car);
        System.out.println(carDto);
    }
}

测试结果:
在这里插入图片描述

高性能实体类转换工具MapStruct 使用教程 阅读详情

相关推荐

mapstruct实现实体类属性的转换

前言 项目开发中,业务分层会涉及不同类型的Bean之间需要相互转换,如PO与DTO之间,PO与VO之间等。手动或者生成编码setter/getter各个对应属性,会显得臃肿繁琐,代码里面出现大量的map或者build方法,有的serivce里面映射的方法代码行数比实际业务代码还要多,MapStruct 就是一个属性映射插件,用于为Java Bean生成类型安全且高性能的映射。基于编译阶段生成get/set代码,此实现过程中没有反射,不会造成额外的性能损失。只需要定义一个 Mapper 接口,M

qq_45789058的博客 1907

Mapstruct 遇坑 ---更改类里字段并不会重新生成实现类

mapstruct 是目前最为常用的对象属性转换利器,因为我们日常在CURD时,会写很多关于PO转VO、VO转DTO或Req相关的代码。 具体如何使用,网上教程太多了。 对象属性转换利器 mapStruct - 简书 这里主要记录下遇到的坑,这个坑就是当我们去增加、删除、修改entity(或者称dto)的字段时,它并不会生成新的实现类,导致在启动项目或者代码运行过程中出错。 解决方案:将生成的实现类删除,然后执行maven clean,再编译maven compile ,这样才能重新生成实现类。 .

weixin_41938314的博客 4980

【项目实战】MapStruct实战篇,Java中如何实现HashMap和实体类之间的转换

为了在Java中实现HashMap和实体类之间的转换,可以使用第三方库,例如ModelMapper或MapStruct。这些库提供了一种方便的方式来映射对象之间的字段。

奶爸的编程之路,也就一周冷个三天 1727

MapStruct 实战

mapstruct实战

AG.『Feng』的博客 741

R语言dlnm包避坑指南:手把手教你配置交叉基矩阵(附温度分层与滞后多项式设置)

本文详细介绍了R语言dlnm包在配置交叉基矩阵时的实用技巧与避坑指南,特别针对温度分层与滞后多项式设置提供了具体参数配置建议。通过解析`crossbasis()`函数的核心参数、温度分析的分层策略以及不同基函数的适用场景,帮助研究者高效构建分布滞后非线性模型,避免常见错误并优化模型性能。

weixin_34094282的博客 399

5分钟搞定!用FunASR在本地快速部署达摩院Paraformer语音识别模型(附常见问题解决)

本文详细介绍了如何在本地快速部署阿里达摩院开源的Paraformer语音识别模型。通过FunASR工具包,用户可在5分钟内完成环境配置、模型下载与基础识别,并掌握批量处理、性能调优及构建API服务等进阶技巧。文章重点解析了Paraformer的非自回归架构带来的速度优势,并提供了音频格式转换、依赖冲突、显存不足等常见问题的实战解决方案,助力开发者实现高效、离线的语音转写应用。

p1q2r的博客 705

MAPSTRUCT_1

有了它,能够实现在编译期处理注解,并且读取、修改和添加抽象语法树中的内容。1、继承AbstractProcessor类,重写process方法,在process方法中实现自己的注解处理逻辑。2、编译期动态生成getter/setter,在运行期直接调用框架编译好的class类实现实体映射。安全性高:编译期就实现源对象到目标对象的映射, 如果编译期能够通过,运行期就不会报错。()、java编译过程:源代码---编译器--->.class文件---JVM--->二进制码。3.2 创建convert接口。

qingfishfish的博客 332

Nvidia Isaac Sim安装与配置 入门教程 2024(2)

Isaac Sim 安装和配置教程将指导用户完成从下载软件到设置和运行仿真的全过程。教程内容包括安装必要的依赖项、配置系统环境、配置Omniverse环境以及调试和优化仿真环境的步骤。通过详细的操作步骤和图文并茂的说明,用户可以快速上手 Isaac Sim,构建出高质量的机器人仿真环境,实现其研究和应用目标。

m0_56661101的博客 2万+

MapStruct实体映射转换

MapStruct使用

m0_50176078的博客 815

毫米波雷达IWR1843开箱演示

毫米波雷达IWR1843开箱演示

m0_56120826的博客 7773

西电计组实验二 运算器实验

算术逻辑运算实验 一.实验目的   1.了解简单运算器的数据传输通路。   2.验证运算功能发生器的组合功能。   3.掌握算术逻辑运算加、减、与的工作原理。   4.验证实验台运算的8位加、减、与、直通功能。   5.按给定数据,完成几种指定的算术和逻辑运算。 二.实验原理   算术逻辑单元ALU的数据通路如图2-1所示。其中运算器ALU181根据74LS181的功能用VHDL硬件描述语言编辑而成,构成8位字长的ALU。参加运算的两个8位数据分别为A[7…0]和B[7…0],运算模式由S[3…0]的16种

Polaris的博客 1万+

实体类转换Mapstruct

Java实体类类型转换,Mapstruct

菜鸟程序员的成长之路 1355

混沌系统在图像加密中的应用(二维离散Hénon混沌映射)

Hénon映射是一种二维离散时间动力系统,由美国数学家Michel Hénon在1976年引入。它是混沌动力系统中的经典模型之一,具有简单的形式和复杂的行为。

weixin_42207434的博客 2488

常用的实体类转换方式 - BeanUtil | MapStruct

1. 实体类信息:

假人一个的博客 4909

PCB设计中的规则优先级陷阱:为什么你的过孔总是十字连接?

本文深入解析PCB设计中Altium Designer规则优先级机制,解决过孔总是十字连接而非全连接的问题。通过分析铺铜连接原理和规则匹配逻辑,提供精确控制连接方式的技术实践,包括Custom Query使用和优先级最佳设置,帮助设计师避免常见陷阱,优化高速电路板的电气性能和制造可靠性。

banana的博客 467

Python爬虫实战:扒取专利数据库核心信息,我用这招搞定反爬+数据结构化(附完整可运行代码)

这套爬虫方案从「实际需求」出发,解决了专利数据库抓取的核心痛点:反爬突破、数据结构化、标题创作。核心价值不在于代码多复杂,而在于「实用」——我用这套代码半天就抓取了800+条Python爬虫相关专利,比手动效率提升了几十倍。最后想说:爬虫技术的核心是「解决问题」,而不是炫技。专利数据能帮我们快速了解行业技术趋势,尤其是程序员,从专利中扒出的核心逻辑,远比零散的博客文章更系统。希望这篇实战分享能帮到有需要的小伙伴,也欢迎在评论区交流专利爬虫的更多技巧!

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 2124

【三层架构实体类转换-mapstruct】

在使用MapStruct,idea2020.3版本在build项目的时候出现错误:java: Internal error in the mapping processor: java.lang.NullPointerException。2、在pom.xml里面修改mapstruct-processor的版本,升级至1.4.1.Final或者更高版本。我碰到这个错误,是因为我的父工程中引入了依赖。说到实体类的转换,大家肯定不陌生,不就是一堆的。**解决:**在子工程引入下就好了!这就好了,下面是一些扩展。.

luckeryu的博客 525

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Spring Boot用mapstruct实现VO类和实体类转换

VO类和实体类的转换是我们写业务逻辑代码中很经常用到的东西,最近我们项目组规定统一用mapstruct来做,mapstruct是在程序编译的时候就已经生成了VO类和实体类的转换类,这样子就不用在程序运行的时候才去转换,减少了性能上的损耗。 Maven文件配置: <dependency> <groupId>org.mapstruct</groupId&...

龍的天空 3449

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

性能高、上手快,实体类转换工具 MapStruct 到底有多强大!

有时候,对于某些类型,无法通过代码生成器的形式来进行处理。那么, 就需要自定义的方法来进行转换。这时候,我们可以在接口(同一个接口,后续还有调用别的 Mapper 的方法)中定义默认方法(Java8及之后)。

jakeswang的博客 1202

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

mapstruct转换实体类、List对象、IPage对象

mybatis-plus依赖要用高版本,低版本没有convert方法(测的时候用3.0.5发现没有convert方法) <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>3.4.3</version> </dependency> map

anqilaroot的博客 4145

EntityUtils MapStruct BeanCopier 数据实体类转换工具 DO BO VO DTO 附视频

在实际项目开发过程中,总有数据实体类互相转换的需求,DO、BO、VO、DTO等数据模型转换经常发生。

Java知识图谱的博客 1512

【MapStruct】PO、DTO、VO实体类分层与转换

场景需要哪个依赖?原因。

本博客旨在记录软件开发中的点滴进步,特别是围绕Java后端开发领域的深度学习与实践总结。在这里,你可以找到关于Spring全家桶、并发编程、微服务架构以及数据库优化等方面的原创文章。欢迎在博客下方留言与我交流,期待与志同道合的你一起探讨技术 915

使用MapStruct的@Mapper注解实现实体类间的相互转换

再为两个需要相互转换的实体类间定义一个mapper接口调用,,项目启动后,将UserMapper注入Spring容器后,注解会在target文件夹中自动生成对应字段的getter、setter方法,避免了大量重复的功能。/*** DTO转Entity*//*** Entity转DTO*//*** DTO集合转Entity集合*//*** Entity集合转DTO集合*/在target文件夹自动生成的代码如下顺带讲一下注解中的unmappedTargetPolicy和。

m0_56666971的博客 1192

Java开发-实际工作经验和技巧-0005-使用MapStruct进行两个实体类的转换,出现所有属性值都为null的情况

Java开发-实际工作经验和技巧-0005-使用MapStruct进行两个实体类的转换,出现所有属性值都为null的情况

weixin_43873121的博客 908

实体类转换工具 MapStruct,不要再使用BeanUtils了

MapStruct is a code generator that greatly simplifies the implementation of mappings between Java bean types based on a convention over configuration approach. The generated mapping code uses plain method invocations and thus is fast, type-safe and easy to

yilishuku的专栏 1378

MapStruct 实体类转换工具,看这一篇就够了!

在一个成熟的工程中,尤其是现在的分布式系统中,应用与应用之间,还有单独的应用细分模块之后,DO 一般不会让外部依赖,这时候需要在提供对外接口的模块里放 DTO 用于对象传输,也即是 DO 对象对内,DTO对象对外,DTO 可以根据业务需要变更(只需部分字段或字段名不同等),并不需要映射 DO 的全部属性。 这种 对象与对象之间的互相转换,就需要有一个专门用来解决转换问题的工具,毕竟每一个字段都 get/set 会很麻烦。 MapStruct 就是这样的一个属性映射工具,只需要定义一个 Mapper 接口

ToBeMaybe_的博客 6449
上一篇: SpringBoot自定义注解
下一篇: docker安装kafka和zookeeper
程序员老石
博客等级 码龄8年 286粉丝 162原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值