java中实现map与对象相互转换的几种实现

当我们需要将Java中的Map和对象进行相互转换时,可以使用以下几种实现方法:

方法一:手动转换

手动将Map中的键值对映射到Java Bean中的字段,并反之。这种方法的实现相对比较简单,但是存在缺陷是需要手动对属性进行处理,比较繁琐,不够自动化

public class User {
    private Long id;
    private String name;
    private Integer age;
    // ... getter setter 方法
}

Map<String, Object> map = new HashMap<>();
map.put("id", 1L);
map.put("name", "Tom");
map.put("age", 24);

User user = new User();
user.setId((Long) map.get("id"));
user.setName((String) map.get("name"));
user.setAge((Integer) map.get("age"));

Map<String, Object> mapAgain = new HashMap<>();
mapAgain.put("id", user.getId());
mapAgain.put("name", user.getName());
mapAgain.put("age", user.getAge());

方法二:使用 MapStruct

MapStruct是一个Java注释处理器,根据Java Bean之间的映射自动生成Java Bean之间相互转换的代码。通过使用MapStruct,可以自动将Map和Java Bean进行转换,此外代码质量更好,更少的Bug,效率更高。

@Mapper
public interface UserMapper {
    UserMapper INSTANCE = Mappers.getMapper(UserMapper.class);

    User map(Map<String, Object> map);

    Map<String, Object> map(User user);
}

Map<String, Object> map = new HashMap<>();
map.put("id", 1L);
map.put("name", "Tom");
map.put("age", 24);

User user = UserMapper.INSTANCE.map(map);

Map<String, Object> mapAgain = UserMapper.INSTANCE.map(user);

示例

以把Java对象转换为Map为例,运用方法二:

public class User {
    private String username;
    private String password;
    private int age;

    // getter 和 setter 方法
}

@Mapper
public interface UserMapper {
    UserMapper INSTANCE = Mappers.getMapper(UserMapper.class);
    Map<String, Object> toMap(User user);
}

User user = new User();
user.setUsername("Tom");
user.setPassword("123456");
user.setAge(18);

Map<String, Object> map = UserMapper.INSTANCE.toMap(user);
System.out.println(map.get("username"));  //Tom
System.out.println(map.get("password"));  //123456
System.out.println(map.get("age"));       //18

以上是将Java中的对象转换成Map,如果想要将Map转换成Java对象呢?接下来我们看一个示例:

public class User {
    private String username;
    private String password;
    private int age;

    // getter 和 setter 方法
}

@Mapper
public interface UserMapper {
    UserMapper INSTANCE = Mappers.getMapper(UserMapper.class);

    @SuppressWarnings("unchecked")
    User toUser(Map<String, Object> map);
}

Map<String, Object> userMap = new HashMap<String, Object>() {{
    put("username", "Jerry");
    put("password", "000000");
    put("age", 20);
}};

User user = UserMapper.INSTANCE.toUser(userMap);
System.out.println(user.getUsername());  //Jerry
System.out.println(user.getPassword());  //000000
System.out.println(user.getAge());       //20

使用MapStruct的方法在代码结构上更加清晰明了,如果要进行大量的对象和Map转换,建议使用MapStruct,提高代码效率和可读性。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java中实现map与对象相互转换的几种实现 - Python技术站

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

相关文章

  • Java连接sqlserver2008数据库代码

    下面是连接sqlserver2008数据库的完整攻略。 安装sqljdbc驱动 首先需要安装sql jdbc驱动,可以到以下网址下载对应版本的驱动:https://docs.microsoft.com/zh-cn/sql/connect/jdbc/download-microsoft-jdbc-driver-for-sql-server?view=sql-s…

    Java 2023年6月1日
    00
  • 一文带你深入了解Java的数据结构

    一文带你深入了解Java的数据结构 什么是数据结构 数据结构是指数据如何在计算机中组织和存储的方式。在计算机科学中,数据结构是一种特殊的格式化数据,使得计算机程序能够高效地访问和修改数据。其中,常用的数据结构有数组、链表、栈、队列、树等。 Java的数据结构 Java中自带了一些数据结构类库,例如:Collection、List、Set、Map等。这些数据结…

    Java 2023年5月23日
    00
  • spring boot(一)之入门篇

    下面是关于“springboot(一)之入门篇”的完整攻略,分为以下几个部分: 一、什么是Spring Boot? Spring Boot 是一个用来简化 Spring 应用的搭建和开发的框架,是Spring Framework的一个扩展。通过Spring Boot,可以快速创建一个独立、运行的 Spring 应用程序,并且可以以最小的配置开发 Spring…

    Java 2023年5月15日
    00
  • Commons beanutils组件简介

    Commons BeanUtils 组件简介 Commons BeanUtils 组件是 Apache Common 组件库中的一个组件,它提供了许多用于操作 JavaBean 对象的工具类。 功能介绍 Commons BeanUtils 主要提供以下几个方面的功能: 属性拷贝 BeanUtils 提供了一个 copyProperties() 方法,用于从一…

    Java 2023年6月15日
    00
  • Java编程中的检查型异常与非检查型异常分析

    Java中的异常分为检查型异常和非检查型异常。检查型异常是指在编译期间就需要进行处理,否则代码将无法编译通过。非检查型异常则是指在运行期间发生,不处理也可以编译通过,但是会导致程序出错或崩溃。 检查型异常 检查型异常需要在程序中显式地进行处理。如果不处理,编译时就无法通过。常见的检查型异常有以下几种: IOException 当处理输入输出流时,由于设备或底…

    Java 2023年5月27日
    00
  • 内存泄漏的原因有哪些?

    以下是关于内存泄漏的原因的完整使用攻略: 内存泄漏的原因 内存泄漏是指程序在运行过程中,分配的内存空间没有被及时释放,导致内存间的浪费和程序运行速度的下降。内存泄漏的原因主要有以下几点: 1. 没有及时释内存 在程序中,如果分配了内存空间,就需要在不需要使用这个内存空间时及时释放,否则会致内存泄漏。例如,在 C++ 中,使用 new 运算符分配内存空间时,需…

    Java 2023年5月12日
    00
  • java 中自定义OutputFormat的实例详解

    Java 中自定义 OutputFormat 的实例详解 在 Java 编程中,我们有时候需要对输出结果进行格式化处理,这时候我们就可以使用 OutputFormat 类实现。OutputFormat 是 org.dom4j.io 包中的一个类,它是用来控制 XmlWriter 的输出格式的。 OutputFormat 类的基本用法 OutputFormat…

    Java 2023年5月26日
    00
  • SpringBoot接口返回结果封装方法实例详解

    SpringBoot接口返回结果封装方法实例详解 在SpringBoot中,我们可以使用接口返回结果封装方法来统一处理接口返回结果。本文将详细讲解SpringBoot接口返回结果封装方法实例的完整攻略,并提供两个示例。 1. 接口返回结果封装方法 在SpringBoot中,我们可以使用接口返回结果封装方法来统一处理接口返回结果。以下是接口返回结果封装方法的基…

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