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日

相关文章

  • JDBC插入数据返回数据主键代码实例

    下面就是“JDBC插入数据返回数据主键”完整攻略,包含以下内容: 概述 实现步骤 示例1:直接使用Statement执行插入操作并返回主键 示例2:使用PreparedStatement预编译执行插入操作并返回主键 1. 概述 在开发中,我们经常需要在数据库中插入数据,并获取插入后的数据主键值。JDBC 提供了两种方式来执行插入操作并返回主键:直接使用 St…

    Java 2023年5月20日
    00
  • Nginx + Tomcat实现请求动态数据和请求静态资源的分离详解

    Nginx是一个高性能的HTTP和反向代理服务器,能够和Tomcat等Web应用服务器整合,实现请求动态数据和请求静态资源的分离。下面是使用Nginx + Tomcat实现请求动态数据和请求静态资源的分离的完整攻略。 步骤一:安装Nginx和Tomcat 首先需要安装Nginx和Tomcat,可以通过源代码安装或使用包管理器安装,具体请参考相关文档。 步骤二…

    Java 2023年6月15日
    00
  • 使用springMVC所需要的pom配置

    以下是关于“使用SpringMVC所需要的POM配置”的完整攻略,其中包含两个示例。 使用SpringMVC所需要的POM配置 SpringMVC是一种基于Java的Web框架,它可以帮助我们快速地开发Web应用程序。在使用SpringMVC时,我们需要在项目中添加一些依赖库。本文将讲解使用SpringMVC所需要的POM配置。 添加SpringMVC依赖 …

    Java 2023年5月17日
    00
  • Sprint Boot @RequestPart使用方法详解

    Spring Boot的@RequestPart的作用与使用方法 在Spring Boot中,@RequestPart注解用于获取HTTP请求中的文件上传参数。通过使用@RequestPart注解,可以方便地获取HTTP请求中的文件上传参数,并将其注入到方法参数中。在本文中,我们将详细介绍@RequestPart注解的作用和使用方法,并提供两个示例。 @Re…

    Java 2023年5月5日
    00
  • 浅谈Java中实现深拷贝的两种方式—clone() & Serialized

    Java中实现对象拷贝通常有两种方式:浅拷贝和深拷贝。浅拷贝只复制原对象中所有基本数据类型的值和引用类型变量的地址,而深拷贝则是在堆中重新开辟空间,将原对象的所有属性都复制到新的对象中去,新的对象与原始对象没有任何关联。本文将讲解Java中实现深拷贝的两种方式:clone()和Serialized。 使用clone()方法实现深拷贝 Java中Object类…

    Java 2023年5月19日
    00
  • 详解Java的MyBatis框架中动态SQL的基本用法

    下面是详解Java的MyBatis框架中动态SQL的基本用法的完整攻略。 MyBatis中动态SQL的基本用法 MyBatis是Java中使用的一种持久化框架,它提供了许多强大的功能,其中动态SQL是其中之一。动态SQL可以根据传入的参数不同,生成不同的SQL语句,非常适用于开发灵活的应用程序。接下来我们就来详细讲解如何在MyBatis中使用动态SQL。 条…

    Java 2023年5月20日
    00
  • springmvc下实现登录验证码功能示例

    Spring MVC 下实现登录验证码功能示例 在 Web 开发中,为了防止恶意攻击和机器人攻击,我们通常会在登录页面添加验证码功能。在 Spring MVC 中,我们可以使用 Java 的 Graphics2D 类来生成验证码图片,并使用 Session 来存储验证码。本文将详细讲解如何在 Spring MVC 中实现登录验证码功能,并提供两个示例说明。 …

    Java 2023年5月18日
    00
  • java实现学生教师管理系统

    Java实现学生教师管理系统攻略 1. 系统概述 学生教师管理系统是一个管理学校、教学活动以及学生信息和教师信息的系统。该系统主要包括三个主要模块:学生管理模块、教师管理模块和课程管理模块。 2. 系统功能 2.1 学生管理模块 该模块主要包含学生的基本信息、课程信息、成绩信息和考勤信息。具体功能包括: 学生信息的添加、修改、删除和查询 课程信息的添加、修改…

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