最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java實(shí)體類之間的相互轉(zhuǎn)換方式

 更新時(shí)間:2023年08月21日 16:12:12   作者:與黑夜為伍  
這篇文章主要介紹了Java實(shí)體類之間的相互轉(zhuǎn)換方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

Java實(shí)體類之間的相互轉(zhuǎn)換

為什么要實(shí)體類之間相互轉(zhuǎn)換呢?

1.防止數(shù)據(jù)的泄露,比如使用Hibernate查詢用戶表,用戶表有用戶的賬號(hào)和密碼,我們后端給前端數(shù)據(jù)的時(shí)候并不希望給前端傳遞密碼這個(gè)字段。

2.防止數(shù)據(jù)過(guò)大,前端無(wú)法接收,hibernate使用的是關(guān)聯(lián)查詢,如果關(guān)聯(lián)的表非常多的話前端接收會(huì)報(bào)錯(cuò)。

3.更好的前后端分離,前端不用考慮后端的業(yè)務(wù)邏輯。而后端只需要給出返回的結(jié)果是否成功的編碼和具體提示內(nèi)容以及其它信息。

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

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

創(chuàng)建第一個(gè)實(shí)體類School

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

創(chuàng)建第二個(gè)實(shí)體類

public class SchoolDTO {
    private Integer schoolId;
    private String schoolName;
    //省略getter和setter方法
     //創(chuàng)建轉(zhuǎn)換方法
     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;
        }
        //具體的轉(zhuǎn)換內(nèi)容
        @Override
        protected SchoolDTO doBackward(School school) {
            SchoolDTO dto = new SchoolDTO();
            dto.setSchoolId(school.getSchoolId());
            dto.setSchoolName(school.getSchoolName());
            return dto;
        }
    }
    }

創(chuàng)建測(cè)試類(一條數(shù)據(jù)轉(zhuǎn)換)

public class test {
    public static void main(String[] args) {
        //一條數(shù)據(jù)轉(zhuǎn)換
        School school = new School();
        school.setSchoolId(1);
        school.setSchoolName("上海理工大學(xué)");
        school.setName("李四");
        SchoolDTO dto = new SchoolDTO().convertFrom(school);
        System.out.println(dto);
        //Page類型數(shù)據(jù)轉(zhuǎn)換
        //schools.map(s -> new SchoolDTO().convertFrom(s));
        //List類型
        /*
        List<SchoolDTO> list = dto.stream().map(address -> {
           return  new SchoolDTO().convertFrom(address);
        }).collect(Collectors.toList());
        */
    }

輸入結(jié)果:

SchoolDTO{schoolId=1, schoolName='上海理工大學(xué)'}

第二種:直接使用this

1、首先創(chuàng)建一個(gè)操作數(shù)據(jù)庫(kù)的實(shí)體類:School,和用來(lái)給前端傳遞內(nèi)容的實(shí)體類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方法
    //轉(zhuǎn)換方法
    public SchoolDTO toSchool(School dto){
    this.setId(dto.getId());
    this.setAddress("轉(zhuǎn)換的結(jié)果是:"+dto.getAddress());
    this.setSchoolName("轉(zhuǎn)換的結(jié)果是:"+dto.getSchoolName());
    return this;
    }
    }

2、測(cè)試方法進(jìn)行測(cè)試

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

3、打印結(jié)果

在這里插入圖片描述

這種方法比較方便,不用引用jar的依賴

實(shí)體類相互轉(zhuǎn)換工具類

場(chǎng)景

不同的實(shí)體類之間取相同數(shù)據(jù)賦值

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("【數(shù)據(jù)轉(zhuǎn)換】數(shù)據(jù)轉(zhuǎn)換出錯(cuò),目標(biāo)對(duì)象{}構(gòu)造函數(shù)異常", 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("【數(shù)據(jù)轉(zhuǎn)換】數(shù)據(jù)轉(zhuǎn)換出錯(cuò),目標(biāo)對(duì)象{}構(gòu)造函數(shù)異常", 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("【數(shù)據(jù)轉(zhuǎn)換】數(shù)據(jù)轉(zhuǎn)換出錯(cuò),目標(biāo)對(duì)象{}構(gòu)造函數(shù)異常", target.getName(), e);
            return null;
        }
    }
}

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • SpringBoot + WebSocket 實(shí)現(xiàn)答題對(duì)戰(zhàn)匹配機(jī)制案例詳解

    SpringBoot + WebSocket 實(shí)現(xiàn)答題對(duì)戰(zhàn)匹配機(jī)制案例詳解

    這篇文章主要介紹了SpringBoot + WebSocket 實(shí)現(xiàn)答題對(duì)戰(zhàn)匹配機(jī)制,分別為每個(gè)用戶擬定四種在線狀態(tài),通過(guò)流程圖給大家展示,需要的朋友可以參考下
    2021-05-05
  • Java中的字符串用法小結(jié)

    Java中的字符串用法小結(jié)

    這篇文章主要介紹了Java中的字符串用法,實(shí)例總結(jié)了java中關(guān)于字符串操作的各種常用的技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2015-04-04
  • SpringBoot與JWT整合方式

    SpringBoot與JWT整合方式

    文章介紹了如何在Spring?Boot項(xiàng)目中整合JWT(JSON?Web?Token),包括JWT的結(jié)構(gòu)、使用方法、測(cè)試以及配置,主要內(nèi)容涵蓋了依賴配置、數(shù)據(jù)庫(kù)表設(shè)計(jì)、實(shí)體類、數(shù)據(jù)訪問層、服務(wù)層、JWT工具類、攔截器配置和控制器測(cè)試等多個(gè)方面
    2024-11-11
  • java判斷用戶輸入的是否至少含有N位小數(shù)的實(shí)例

    java判斷用戶輸入的是否至少含有N位小數(shù)的實(shí)例

    下面小編就為大家分享一篇java判斷用戶輸入的是否至少含有N位小數(shù)的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2017-12-12
  • Java中LinkedList真的是查找慢增刪快

    Java中LinkedList真的是查找慢增刪快

    這篇文章主要介紹了Java中LinkedList真的是查找慢增刪快,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-10-10
  • 簡(jiǎn)單了解SpringBoot HATEOAS使用方法

    簡(jiǎn)單了解SpringBoot HATEOAS使用方法

    這篇文章主要介紹了簡(jiǎn)單了解SpringBoot HATEOAS使用方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-10-10
  • Java設(shè)計(jì)模式之命令模式

    Java設(shè)計(jì)模式之命令模式

    這篇文章介紹了Java設(shè)計(jì)模式之命令模式,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-10-10
  • Java變量與常量一文全掌握(包含常量類、interface 與 final 的比較)

    Java變量與常量一文全掌握(包含常量類、interface 與 final 的比較)

    本文介紹Java變量與常量的基本概念,涵蓋變量分類(局部/實(shí)例/類)、聲明語(yǔ)法及使用場(chǎng)景,常量定義方式(final/字面量/枚舉)與命名規(guī)范,結(jié)合實(shí)例代碼給大家的非常詳細(xì),感興趣的朋友一起看看吧
    2025-08-08
  • Java7之forkjoin簡(jiǎn)介_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    Java7之forkjoin簡(jiǎn)介_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    Java7引入了Fork Join的概念,來(lái)更好的支持并行運(yùn)算。接下來(lái)通過(guò)本文給大家分享Java7之forkjoin簡(jiǎn)介,感興趣的朋友一起看看吧
    2017-06-06
  • Mybatis中強(qiáng)大的resultMap功能介紹

    Mybatis中強(qiáng)大的resultMap功能介紹

    這篇文章主要給大家介紹了關(guān)于Mybatis中強(qiáng)大的resultMap功能的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Mybatis具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-06-06

最新評(píng)論

分宜县| 晴隆县| 枞阳县| 土默特右旗| 丹阳市| 突泉县| 武穴市| 广宗县| 德州市| 隆化县| 弥勒县| 尼玛县| 醴陵市| 安福县| 张掖市| 保定市| 上犹县| 汤阴县| 南江县| 岑巩县| 探索| 镇赉县| 富宁县| 霍山县| 靖西县| 盐池县| 香港 | 应城市| 阜新| 邯郸市| 五原县| 长治市| 马鞍山市| 康马县| 汾阳市| 平潭县| 新巴尔虎左旗| 临江市| 漾濞| 宝坻区| 都兰县|