Java实体类之间的相互转换方式

 更新时间:2023年08月21日 16:12:12   作者:与黑夜为伍  
这篇文章主要介绍了Java实体类之间的相互转换方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

Java实体类之间的相互转换

为什么要实体类之间相互转换呢?

1.防止数据的泄露,比如使用Hibernate查询用户表,用户表有用户的账号和密码,我们后端给前端数据的时候并不希望给前端传递密码这个字段。

2.防止数据过大,前端无法接收,hibernate使用的是关联查询,如果关联的表非常多的话前端接收会报错。

3.更好的前后端分离,前端不用考虑后端的业务逻辑。而后端只需要给出返回的结果是否成功的编码和具体提示内容以及其它信息。

在pom.xml配置文件中添加依赖

   <dependency>
      <groupId>com.google.guava</groupId>
      <artifactId>guava</artifactId>
      <version>23.4-jre</version>
   </dependency>

创建第一个实体类School

public class School {
    private Integer schoolId;
    private String schoolName;
    private String name;
    //省略getter和setter方法
    }

创建第二个实体类

public class SchoolDTO {
    private Integer schoolId;
    private String schoolName;
    //省略getter和setter方法
     //创建转换方法
     public School convertTo() {
        OrderConverter convert = new OrderConverter();
        return convert.convert(this);
    }
    public SchoolDTO convertFrom(School order) {
        OrderConverter convert = new OrderConverter();
        return convert.reverse().convert(order);
    }
    private static class OrderConverter extends Converter<SchoolDTO, School> {
        @Override
        protected School doForward(SchoolDTO schoolDTO) {
            return null;
        }
        //具体的转换内容
        @Override
        protected SchoolDTO doBackward(School school) {
            SchoolDTO dto = new SchoolDTO();
            dto.setSchoolId(school.getSchoolId());
            dto.setSchoolName(school.getSchoolName());
            return dto;
        }
    }
    }

创建测试类(一条数据转换)

public class test {
    public static void main(String[] args) {
        //一条数据转换
        School school = new School();
        school.setSchoolId(1);
        school.setSchoolName("上海理工大学");
        school.setName("李四");
        SchoolDTO dto = new SchoolDTO().convertFrom(school);
        System.out.println(dto);
        //Page类型数据转换
        //schools.map(s -> new SchoolDTO().convertFrom(s));
        //List类型
        /*
        List<SchoolDTO> list = dto.stream().map(address -> {
           return  new SchoolDTO().convertFrom(address);
        }).collect(Collectors.toList());
        */
    }

输入结果:

SchoolDTO{schoolId=1, schoolName='上海理工大学'}

第二种:直接使用this

1、首先创建一个操作数据库的实体类:School,和用来给前端传递内容的实体类SchoolDTO

public class School {
    private Integer id;
    private String schoolName;
    private String address;
    //省略getter和setter方法
    }
public class SchoolDTO {
    private Integer id;
    private String schoolName;
    private String address;
    //省略getter和setter方法
    //省略toString方法
    //转换方法
    public SchoolDTO toSchool(School dto){
    this.setId(dto.getId());
    this.setAddress("转换的结果是:"+dto.getAddress());
    this.setSchoolName("转换的结果是:"+dto.getSchoolName());
    return this;
    }
    }

2、测试方法进行测试

public class TestController {
    public static void main(String[] args) {
        School school = new School();
        school.setId(1);
        school.setSchoolName("北京大学");
        school.setAddress("北京");
        //打印内容
        System.out.println(new SchoolDTO().toSchool(school));
    }
}

3、打印结果

在这里插入图片描述

这种方法比较方便,不用引用jar的依赖

实体类相互转换工具类

场景

不同的实体类之间取相同数据赋值

package com.lrhealth.mappingintegration.utils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;
@Slf4j
public class BeanHelper {
    public static <T> T copyProperties(Object source, Class<T> target){
        try {
            T t = target.newInstance();
            BeanUtils.copyProperties(source, t);
            return t;
        } catch (Exception e) {
            log.error("【数据转换】数据转换出错,目标对象{}构造函数异常", target.getName(), e);
             return null;
        }
    }
    public static <T> List<T> copyWithCollection(List<?> sourceList, Class<T> target){
        try {
            return sourceList.stream().map(s -> copyProperties(s, target)).collect(Collectors.toList());
        } catch (Exception e) {
            log.error("【数据转换】数据转换出错,目标对象{}构造函数异常", target.getName(), e);
             return null;
        }
    }
    public static <T> Set<T> copyWithCollection(Set<?> sourceList, Class<T> target){
        try {
            return sourceList.stream().map(s -> copyProperties(s, target)).collect(Collectors.toSet());
        } catch (Exception e) {
            log.error("【数据转换】数据转换出错,目标对象{}构造函数异常", target.getName(), e);
            return null;
        }
    }
}

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • SpringBoot使用freemarker导出word文件方法详解

    SpringBoot使用freemarker导出word文件方法详解

    这篇文章主要介绍了SpringBoot使用freemarker导出word文件方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2022-11-11
  • Spring Boot实现图片上传功能

    Spring Boot实现图片上传功能

    这篇文章主要为大家详细介绍了Spring Boot实现图片上传功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-05-05
  • 从零构建可视化jar包部署平台JarManage教程

    从零构建可视化jar包部署平台JarManage教程

    这篇文章主要为大家介绍了从零构建可视化jar包部署平台JarManage教程详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-05-05
  • java微信开发API第二步 获取和回复消息

    java微信开发API第二步 获取和回复消息

    这篇文章主要为大家详细介绍了java微信开发API第二步,获取消息和回复消息,感兴趣的小伙伴们可以参考一下
    2016-06-06
  • Intellij Idea中批量导入第三方jar包的全过程

    Intellij Idea中批量导入第三方jar包的全过程

    引入jar包一般都是针对小的java项目,这篇文章主要给大家介绍了关于Intellij Idea中批量导入第三方jar包的相关资料,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2021-10-10
  • 浅谈springboot与微服务架构

    浅谈springboot与微服务架构

    这篇文章主要介绍了浅谈springboot与微服务架构,SpringBoot是由 Pivotal团队提供的框架,其设计⽬的是⽤来简化新Spring应⽤,初始搭建以及开发过程,该框架使⽤了特定的⽅式来进⾏配置,需要的朋友可以参考下
    2023-07-07
  • jar包冲突常用的解决方案

    jar包冲突常用的解决方案

    引言在使用java语言开发,maven做项目管理时,我们经常遇到一个头疼的问题就是jar包冲突,这篇文章主要给大家介绍了关于jar包冲突常用的解决方案,需要的朋友可以参考下
    2023-12-12
  • SpringBoot依赖管理特性详解

    SpringBoot依赖管理特性详解

    Spring Boot自动引入依赖的版本信息可以在`spring-boot-starter-parent`和`spring-boot-dependencies`的pom文件中找到,如果需要修改依赖版本,可以在项目pom文件中添加覆盖配置项并刷新依赖即可
    2025-01-01
  • SpringBoot使用Async注解失效原因分析及解决(spring异步回调)

    SpringBoot使用Async注解失效原因分析及解决(spring异步回调)

    这篇文章主要介绍了SpringBoot使用Async注解失效原因分析及解决(spring异步回调),具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-10-10
  • Java 获取指定日期的实现方法总结

    Java 获取指定日期的实现方法总结

    以下是对Java中获取指定日期的实现方法进行了归纳总结,需要的朋友可以参考下
    2013-07-07

最新评论