前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >mapstruct

mapstruct

作者头像
阿超
发布2022-08-21 12:54:42
9350
发布2022-08-21 12:54:42
举报
文章被收录于专栏:快乐阿超快乐阿超

首先按照官方文档引入GAV,但要注意和lombok有版本冲突问题,因此我选择这个版本:

这里放上主要配置

代码语言:javascript
复制
<properties>
    <java.version>1.8</java.version>
    <lombok.version>1.18.10</lombok.version>
    <mapstruct.version>1.3.0.Final</mapstruct.version>
</properties>

<dependencies>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>${lombok.version}</version>
        <scope>provided</scope>
        <optional>true</optional>
    </dependency>
    <dependency>
        <groupId>org.mapstruct</groupId>
        <artifactId>mapstruct</artifactId>
        <version>${mapstruct.version}</version>
    </dependency>
</dependencies>

<plugins>
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.8.1</version>
        <configuration>
            <source>1.8</source>
            <target>1.8</target>
            <encoding>UTF-8</encoding>
            <annotationProcessorPaths>
                <path>
                    <groupId>org.projectlombok</groupId>
                    <artifactId>lombok</artifactId>
                    <version>${lombok.version}</version>
                </path>
                <path>
                    <groupId>org.mapstruct</groupId>
                    <artifactId>mapstruct-processor</artifactId>
                    <version>${mapstruct.version}</version>
                </path>
            </annotationProcessorPaths>
        </configuration>
    </plugin>
</plugins>

然后我准备两个实体类进行转换

代码语言:javascript
复制
package com.ruben.simplescaffold.entity;

import lombok.*;
import lombok.experimental.Accessors;

/**
 * 用户
 *
 * @author <achao1441470436@gmail.com>
 * @since 2021/7/30 10:22
 */
@Data
@ToString
@Builder
@Accessors(chain = true)
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(callSuper = true)
public class UserDetail extends BaseEntity<UserDetail> {

    private static final long serialVersionUID = 1L;

    /**
     * 用户名
     */
    private String username;

    /**
     * 密码
     */
    private String password;

}

以及

代码语言:javascript
复制
package com.ruben.simplescaffold.pojo.vo;

import java.io.Serializable;

import lombok.Data;

/**
 * 用户VO
 *
 * @author <achao1441470436@gmail.com>
 * @since 2022/3/23 19:20
 */
@Data
public class UserVO implements Serializable {

    private static final long serialVersionUID = -6541515410807361292L;

    private String uname;

    private String pwd;

}

开始编写Mapper,注意此处注解导入的依赖为mapStruct

代码语言:javascript
复制
package com.ruben.simplescaffold.mapper.mapstruct;

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

import com.ruben.simplescaffold.entity.UserDetail;
import com.ruben.simplescaffold.pojo.vo.UserVO;

/**
 * 用户mapstruct转换mapper
 *
 * @author <achao1441470436@gmail.com>
 * @since 2022/3/23 19:18
 */
@Mapper
public interface MapUserMapper {

    MapUserMapper INSTANCE = Mappers.getMapper(MapUserMapper.class);

    @Mapping(source = "username", target = "uname")
    @Mapping(source = "password", target = "pwd")
    UserVO convertPoToVo(UserDetail userDetail);

}

当然如果你想注入到spring容器中,可以指定@Mapper(componentModel = "spring")

然后编写测试类测试一下

代码语言:javascript
复制
package com.ruben.simplescaffold;

import org.junit.Test;
import org.junit.jupiter.api.Assertions;

import com.ruben.simplescaffold.entity.UserDetail;
import com.ruben.simplescaffold.mapper.mapstruct.MapUserMapper;
import com.ruben.simplescaffold.pojo.vo.UserVO;

/**
 * @author <achao1441470436@gmail.com>
 * @since 2022/3/23 19:22
 */
public class MapUserMapperTest {

    @Test
    public void convertPoToVoTest() {
        UserVO userVO = MapUserMapper.INSTANCE.convertPoToVo(UserDetail.builder().username("ruben").password("vampire").build());
        Assertions.assertEquals("ruben", userVO.getUname());
        Assertions.assertEquals("vampire", userVO.getPwd());
    }

}

测试通过

image-20220323193135201
image-20220323193135201

并且可以在这里看到我们生成的代码

image-20220323193207699
image-20220323193207699

我们还可以下载idea插件

image-20220323193243790
image-20220323193243790

下载了,我们就可以按住ctrl鼠标移动到@Mapping注解的sourcetarget上,还能点进去

image-20220323193356676
image-20220323193356676
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022-03-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档