SpringBoot 整合mapstruct的实现步骤

yizhihongxing

下面是详细讲解“SpringBoot 整合 MapStruct 的实现步骤”的完整攻略。

什么是 MapStruct

MapStruct 是一个在编译时期通过注解自动生成 Java Bean 映射代码的框架。它具有简单易用、高效准确等特点,可以大幅度提升 Java Bean 映射的开发效率。

SpringBoot 整合 MapStruct 的实现步骤

步骤一:添加 MapStruct 依赖

在 SpringBoot 项目中添加 MapStruct 依赖,可参考以下配置:

<dependency>
    <groupId>org.mapstruct</groupId>
    <artifactId>mapstruct</artifactId>
    <version>${mapstruct.version}</version>
</dependency>

其中,${mapstruct.version} 需要在项目中指定。

步骤二:创建 Bean 实体类

创建需要转换的 Bean 实体类,并使用 @Mapper 注解标注该类,该注解表明这是一个 MapStruct 映射器,在编译时期会根据该注解自动生成 Bean 映射代码,示例如下:

@Mapper
public interface UserMapper {
    UserDto toUserDto(User entity);
    User toUser(UserDto dto);
}

步骤三:编写 MapStruct 映射接口

在上一步骤中创建的 Bean 映射器中,需要创建映射接口,用于 Bean 属性之间的映射,示例代码如下:

public interface UserMapper {
    UserDto toUserDto(User entity);
    User toUser(UserDto dto);
}

步骤四:实现 MapStruct 映射接口

编写具体的 Bean 属性映射实现代码,可使用 MapStruct 提供的 @Mappings 注解和 @Mapping 注解自定义属性映射,示例代码如下:

@Mapper
public interface UserMapper {
    @Mappings({
        @Mapping(source = "name", target = "username"),
        @Mapping(source = "password", target = "password"),
        @Mapping(source = "phone", target = "userPhone.phoneNum"),
    })
    UserDto toUserDto(User entity);

    // 反向映射
    @InheritInverseConfiguration
    User toUser(UserDto dto);
}

步骤五:调用 MapStruct 映射方法

在代码中调用 MapStruct 的映射方法,示例代码如下:

@Autowired
private UserMapper userMapper;

public void test() {
    User entity = new User();
    entity.setName("zhangsan");
    entity.setPassword("123456");
    entity.setPhone("13812345678");

    UserDto dto = userMapper.toUserDto(entity);

    System.out.println(dto);
}

示例 One

下面示例展示了如何使用 MapStruct 实现 User 和 UserDTO 之间的映射。

创建 User

创建 User 类:

@Data
public class User{
    private String name;
    private Integer age;
}

创建 UserDTO

创建 UserDTO 类:

@Data
public class UserDTO{
    private String name;
    private Integer age;
}

创建 UserMapper

创建 UserMapper 接口:

@Mapper
public interface UserMapper {

    UserDTO toDTO(User entity);

    List<UserDTO> toDTOList(List<User> entityList);

    @InheritInverseConfiguration
    //@Mapping(target = "age", ignore = true)//忽略不需要转换的字段映射
    User toEntity(UserDTO dto);

}

测试 UserMapper

编写测试代码,使用 UserMapper 进行 User 和 UserDTO 之间的映射:

@RunWith(SpringRunner.class)
@SpringBootTest
public class UserMapperTest {

    @Autowired
    private UserMapper userMapper;

    @Test
    public void testUserToDTO(){
        User user = new User();
        user.setName("zhangsan");
        user.setAge(18);

        UserDTO userDTO = userMapper.toDTO(user);

        Assert.assertEquals(user.getName(), userDTO.getName());
        Assert.assertEquals(user.getAge(), userDTO.getAge());
    }

    @Test
    public void testDTOToUser(){
        UserDTO userDTO = new UserDTO();
        userDTO.setName("zhangsan");
        userDTO.setAge(18);

        User user = userMapper.toEntity(userDTO);

        Assert.assertEquals(userDTO.getName(), user.getName());
        Assert.assertEquals(userDTO.getAge(), user.getAge());
    }

}

示例 Two

下面示例展示了如何使用 MapStruct 实现 User 和 UserVO 之间的映射。

创建 User

创建 User 类:

@Data
public class User{
    private String name;
    private Integer age;
}

创建 UserVO

创建 UserVO 类:

@Data
public class UserVO{
    private String name;
    private Integer age;
}

创建 UserMapper

创建 UserMapper 接口:

@Mapper
public interface UserMapper {

    UserVO toVO(User entity);

    List<UserVO> toVOList(List<User> entityList);

    @InheritInverseConfiguration
    //@Mapping(target = "age", ignore = true)//忽略不需要转换的字段映射
    User toEntity(UserVO dto);

}

测试 UserMapper

编写测试代码,使用 UserMapper 进行 User 和 UserVO 之间的映射:

@RunWith(SpringRunner.class)
@SpringBootTest
public class UserMapperTest {

    @Autowired
    private UserMapper userMapper;

    @Test
    public void testUserToVO(){
        User user = new User();
        user.setName("zhangsan");
        user.setAge(18);

        UserVO userVO = userMapper.toVO(user);

        Assert.assertEquals(user.getName(), userVO.getName());
        Assert.assertEquals(user.getAge(), userVO.getAge());
    }

    @Test
    public void testVOToUser(){
        UserVO userVO = new UserVO();
        userVO.setName("zhangsan");
        userVO.setAge(18);

        User user = userMapper.toEntity(userVO);

        Assert.assertEquals(userVO.getName(), user.getName());
        Assert.assertEquals(userVO.getAge(), user.getAge());
    }

}

以上就是 SpringBoot 整合 MapStruct 的详细过程。通过以上过程,我们可以看到 MapStruct 在 Bean 映射上的高效和便利的特点,大幅度提升了开发效率。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringBoot 整合mapstruct的实现步骤 - Python技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • linux安装RocketMQ实例步骤

    下面是“Linux安装RocketMQ实例步骤”的完整攻略。 准备工作 在进行安装前,请确保你已经完成如下步骤: 安装好Java环境(建议使用JDK 8及以上版本)。 确认安装好了RocketMQ服务端的压缩包(下载地址详见官网)。 确认你拥有安装并运行RocketMQ所需的系统权限。 安装步骤 下载RocketMQ服务端的压缩包,解压到指定目录下: bas…

    Java 2023年6月2日
    00
  • Java过滤器filter_动力节点Java学院整理

    Java过滤器filter_动力节点Java学院整理 什么是Java过滤器 Java中的过滤器(Filter),是一种能够拦截请求或响应,对请求或响应进行预处理或后处理的东西。当然,这个东西不是完全地由Java语言实现的,实际上它是由Servlet规范中定义的,所以Java中的Filter更准确地讲应该叫做Servlet Filter。Filter实际上是基…

    Java 2023年6月15日
    00
  • 教你用Java实现一个简单的代码生成器

    教你用Java实现一个简单的代码生成器 介绍 本篇攻略将指导读者实现一个简单的代码生成器,该生成器可以根据输入的参数生成指定模板的代码文件。该生成器基于Java语言实现,适用于Java开发者。 工具准备 为了编写该生成器,我们需要准备以下工具和环境: JDK(Java Development Kit) Maven(可以选择,不强制要求) 开发集成环境(IDE…

    Java 2023年5月18日
    00
  • java中字符串常见的方法及总结

    Java中字符串常见的方法及总结 在Java中,字符串(String)是一个非常常见的数据类型。在日常开发中,字符串的操作是必不可少的。下面我们来总结一下Java中字符串常用的方法。 字符串的创建 在Java中,有几种不同的方式来创建字符串。 直接赋值创建字符串 我们可以直接使用双引号来创建字符串,如下所示: String str1 = "Hell…

    Java 2023年5月26日
    00
  • maven install报错中程序包xxx不存在的问题解决

    当我们使用Maven构建Java项目时,可能会遇到mvn install时报错,提示程序包不存在的问题。这种问题通常是由于Maven无法找到所需的依赖项而导致的。 以下是解决“maven install报错中程序包不存在的问题”的攻略: 1. 确认依赖项是否正确引入 首先,需要确认pom.xml中的依赖项是否正确引入。我们可以检查一下Maven仓库中的依赖项…

    Java 2023年6月2日
    00
  • Eclipse+Maven构建Hadoop项目的方法步骤

    下面我将详细讲解“Eclipse+Maven构建Hadoop项目的方法步骤”的完整攻略。本攻略分为以下几个步骤: 1. 安装 JDK 和 Eclipse 首先需要安装 JDK 和 Eclipse。建议使用最新版本的 JDK 和 Eclipse。安装过程不再赘述。 2. 安装 Maven Maven 是 Java 的一个构建工具,用于管理项目的依赖关系和构建过…

    Java 2023年5月20日
    00
  • java web中对json的使用详解

    Java Web中对JSON的使用详解 什么是JSON? JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,常用于Web应用中的前后端数据传输。JSON格式数据本质上是一个JavaScript对象,采用键值对的方式存储数据。 JSON与Java的关系 Java中有许多开源的JSON库,如Jackson、Gson、Fa…

    Java 2023年5月26日
    00
  • 深入了解Java中的static关键字

    深入了解Java中的static关键字 在Java中,static是一个用于修饰变量、方法和内部类等的关键字。它表示这些成员属于类本身,而不是类的实例,因此,我们可以直接通过类名来调用这些成员,无需先实例化对象。 static变量 在Java中,静态变量是共享的、存储在堆区的变量。即,无论创建多少实例对象,它们都只有一个拷贝。我们可以通过类名加点的形式进行直…

    Java 2023年5月26日
    00
合作推广
合作推广
分享本页
返回顶部