SpringBoot 整合mapstruct的实现步骤

下面是详细讲解“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日

相关文章

  • mybatis自动生成@Table、@Column、@Id注解的方法

    完整攻略如下: 环境搭建 在项目中引入 MyBatis Generator 库,官方文档地址:http://www.mybatis.org/generator/index.html 编写配置文件 在项目中编写 MyBatis Generator 配置文件,文件中需要配置数据源及生成代码的相关实体类信息,示例配置文件如下: <?xml version=&…

    Java 2023年5月20日
    00
  • 对象的访问包括哪些操作?

    对象的访问是指通过对象名或引用去访问对象的属性和方法,这是面向对象编程中的基本操作。对象的操作包括下面几个部分: 访问对象的属性 访问对象的属性是对象访问的一部分,属性是指一个对象所具有的特征或状态。可以通过.操作符来访问对象的属性,示例如下: class Person: def __init__(self, name, age): self.name = …

    Java 2023年5月10日
    00
  • 关于maven全局配置文件settings.xml解析

    我将为您详细讲解关于Maven全局配置文件settings.xml的解析攻略。 什么是Maven全局配置文件settings.xml? Maven全局配置文件settings.xml是Maven的主配置文件,位于Maven的安装目录下的conf目录中。默认情况下,该文件是不存在的,需要手动创建。该文件可以用于配置Maven的全局配置信息,如Maven安装仓库…

    Java 2023年5月19日
    00
  • RocketMQ是是如何管理消费进度的?又是如何保证消息成功消费的?

    RocketMQ消费者保障 消息确认机制 consumer的每个实例是靠队列分配来决定如何消费消息的。那么消费进度具体是如何管理的,又是如何保证消息成功消费的?(RocketMQ有保证消息肯定消费成功的特性,失败则重试) 什么是ACK 消息确认机制 在实际使用RocketMQ的时候我们并不能保证每次发送的消息都刚好能被消费者一次性正常消费成功,可能会存在需要…

    Java 2023年4月18日
    00
  • Java基于ShardingSphere实现分库分表的实例详解

    Java基于ShardingSphere实现分库分表的实例详解 ShardingSphere是一款开源的分布式数据库中间件,支持对MySQL、Oracle、SQLServer等关系型数据库进行分库分表。本文将详细讲解在Java项目中如何基于ShardingSphere实现分库分表的方法。 步骤一:引入依赖 在Java项目的pom.xml文件中引入Shardi…

    Java 2023年5月20日
    00
  • Spring Boot启动流程分析

    我来为您讲解关于“SpringBoot启动流程分析”的完整攻略。 SpringBoot启动流程分析 SpringBoot是基于Spring的一个快速开发新一代Java框架,其简化了Spring应用的开发流程,同时也隐藏了Spring框架配置的复杂性,在不需要过多配置的情况下,实现快速搭建Spring应用。 SpringBoot应用的启动过程可以分为以下几个步…

    Java 2023年5月15日
    00
  • java数组的初始化及操作详解

    Java数组的初始化及操作详解 什么是数组 在Java中,数组是一种用于存储固定数量元素的数据结构。它允许同一类型的元素存储在相邻的内存位置中,通过数字索引访问元素,可以在常量时间内访问任何一个元素。 数组的初始化 静态初始化 静态初始化是将数组在声明时进行初始化,代码格式如下: 数据类型[] 数组变量名 = {元素1, 元素2, …}; 示例: int…

    Java 2023年5月26日
    00
  • SpringBoot自动配置原理详解

    Spring Boot是一个非常流行的Java框架,它可以帮助开发人员快速构建基于Spring的应用程序。其中一个最重要的特性是自动配置,它可以根据应用程序的依赖关系和配置文件来自动配置应用程序。在本文中,我们将详细讲解Spring Boot自动配置的原理,并提供两个示例来演示如何使用自动配置。 Spring Boot自动配置原理 Spring Boot的自…

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