欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java編寫的實(shí)體返回VO工具

 更新時(shí)間:2021年05月13日 09:35:19   作者:是小張啊  
VO(value object)通常用于業(yè)務(wù)層之間的數(shù)據(jù)傳遞,VO的屬性是根據(jù)當(dāng)前業(yè)務(wù)的不同而不同的,也就是說(shuō),它的每一個(gè)屬性都一一對(duì)應(yīng)當(dāng)前業(yè)務(wù)邏輯所需要的數(shù)據(jù)的名稱。本文將介紹如何將實(shí)體轉(zhuǎn)換為vo對(duì)象

好久不見(jiàn) 最近些許有點(diǎn)懶惰 程序員嘛 每個(gè)月總會(huì)有幾天的 你懂得

那最近發(fā)現(xiàn)好的代碼寫出來(lái)真的會(huì)讓人有種賞心悅目的存在 相反就會(huì)有一種想掐死寫代碼的那個(gè)人

所以我最近寫了一個(gè)小工具 就是實(shí)體轉(zhuǎn)換VO對(duì)象的一個(gè)小工具 說(shuō)到這里 如果你的第一反應(yīng)是 Spring的BeanUtils 那說(shuō)明你肯定也有遇到過(guò)跟我一樣的問(wèn)題

那具體是怎么做? (不考慮性能的情況下) 等下分析

先看下如果正常返回VO我們需要怎么去操作?

現(xiàn)在有一個(gè)用戶實(shí)體

import lombok.Data;

/**
 * 用戶實(shí)體
 *
 * @author 是小張啊
 * @since 2021-05-06
 */
@Data
public class User {
    /**
     * 用戶id
     */
    private String id;

    /**
     * 用戶名稱(賬號(hào))
     */
    private String name;

    /**
     * 密碼(不加密)
     */
    private String password;
}

現(xiàn)在需要返回一個(gè)VO的對(duì)象 即

import lombok.Data;

/**
 * 用戶vo對(duì)象
 * @author 是小張啊
 * @since 2021-05-06
 */
@Data
public class UserVo {
    /**
     * 用戶id
     */
    private String id;

    /**
     * 用戶名稱(賬號(hào))
     */
    private String name;
}

可以這樣處理

import org.springframework.beans.BeanUtils;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

/**
 * @author 是小張啊
 * @since 2021-05-06
 */
@RestController
public class UserController {

    /**
     * 查詢用戶
     * @return
     */
    @GetMapping("/select")
    public UserVo select() {
        User user = new User();
        user.setId(1);
        user.setName("是小張啊");
        UserVo userVo = new UserVo();
        BeanUtils.copyProperties(user, userVo);
        return userVo;
    }
}

這樣是沒(méi)有問(wèn)題的 不談性能 這樣做是非常穩(wěn)的

現(xiàn)在有這樣的一個(gè)需求 需要返回一個(gè) List<UserVo> 如果你能想到用 java8的lambda表達(dá)式的去使用Spring的BeanUtils 那也是不錯(cuò)的
具體實(shí)現(xiàn)就是

import org.springframework.beans.BeanUtils;
import org.springframework.web.bind.annotation.RestController;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

/**
 * @author 是小張啊
 * @since 2021-05-06
 */
@RestController
public class UserController {

    /**
     * 查詢用戶
     * @return
     */
    public List<UserVo> select() {
        // 初始化數(shù)據(jù)
        User user1 = new User();
        user1.setId(1);
        user1.setName("是小張啊");
        User user2 = new User();
        user2.setId(1);
        user2.setName("是小張啊");
        List<User> users = new ArrayList<>();
        users.add(user1);
        users.add(user2);

        // List<entity> -> List<vo>
        List<UserVo> userVos = users.stream().map(user -> {
            UserVo userVo = new UserVo();
            BeanUtils.copyProperties(user, userVo);
            return userVo;
        }).collect(Collectors.toList());
        return userVos;
    }

}

這其實(shí)也挺不錯(cuò)的 只是每次都這樣寫 屬實(shí)不美觀 如果能提取公共方法去調(diào)用就太舒服了 所以這個(gè)方法也是根據(jù) BeanUtils去優(yōu)化這個(gè)工具

import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

/**
 * Bean 工具類
 * @author 是小張啊
 * @since 2021-05-06
 */
@Slf4j
public class Utils extends BeanUtils {
   
    /**
     * 將實(shí)體批量轉(zhuǎn)換成 vo對(duì)象
     * 注:當(dāng)前只針對(duì) List
     *
     * @param source 實(shí)體集合
     * @param clazz  需要批量轉(zhuǎn)換成的對(duì)象
     * @param <T>
     * @param <S>
     * @return
     */
    @SneakyThrows
    public static <T, S> List<T> conversionVo(List<S> source, Class<T> clazz) {
        return source.stream().map(resources -> {
            T t = null;
            try {
                // 利用反射 創(chuàng)建一個(gè)新的實(shí)例
                t = clazz.newInstance();
                BeanUtils.copyProperties(resources, t);
            } catch (InstantiationException e) {
                log.info("{}實(shí)例化失敗", clazz);
            } catch (IllegalAccessException e) {
                log.info("{}不可訪問(wèn)", clazz);
            }
            return t;
        }).collect(Collectors.toList());
    }
}

這樣就很方便 只需要去調(diào)用即可

import top.lzmvlog.common.Utils;
import org.springframework.web.bind.annotation.RestController;

import java.util.ArrayList;
import java.util.List;

/**
 * @author 是小張啊
 * @since 2021-05-06
 */
@RestController
public class UserController {

    /**
     * 查詢用戶
     * @return
     */
    public List<UserVo> select() {
        // 初始化數(shù)據(jù)
        User user1 = new User();
        user1.setId(1);
        user1.setName("是小張啊");
        User user2 = new User();
        user2.setId(1);
        user2.setName("是小張啊");
        List<User> users = new ArrayList<>();
        users.add(user1);
        users.add(user2);
        List<UserVo> userVos = Utils.conversionVo(users, UserVo.class);
        return userVos;
    }

}

BeanUtils 是有局限性的 你必須保證 實(shí)體的字段值和返回的VO字段值是一樣的

代碼寫到最后 其實(shí)就是一個(gè)不斷優(yōu)化的過(guò)程 領(lǐng)導(dǎo)來(lái)了 不能多說(shuō) 得繼續(xù)搬磚去了

以上就是Java編寫的實(shí)體返回VO工具的詳細(xì)內(nèi)容,更多關(guān)于Java 實(shí)體返回VO工具的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • SpringBoot詳解如何進(jìn)行整合Druid數(shù)據(jù)源

    SpringBoot詳解如何進(jìn)行整合Druid數(shù)據(jù)源

    Druid是阿里開(kāi)發(fā)的一款開(kāi)源的數(shù)據(jù)源,被很多人認(rèn)為是Java語(yǔ)言中最好的數(shù)據(jù)庫(kù)連接池,本文主要介紹了SpringBoot整合Druid數(shù)據(jù)源的方法實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • Java實(shí)現(xiàn)按比抽獎(jiǎng)功能

    Java實(shí)現(xiàn)按比抽獎(jiǎng)功能

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)按比抽獎(jiǎng)功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-01-01
  • Java中自定義注解介紹與使用場(chǎng)景詳解

    Java中自定義注解介紹與使用場(chǎng)景詳解

    最近有所了解到自定義注解的應(yīng)用,因此學(xué)習(xí)了一下,下面這篇文章主要給大家介紹了關(guān)于Java中自定義注解介紹與使用場(chǎng)景的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來(lái)一起看看吧
    2018-09-09
  • 通過(guò)實(shí)例深入學(xué)習(xí)Java的Struts框架中的OGNL表達(dá)式使用

    通過(guò)實(shí)例深入學(xué)習(xí)Java的Struts框架中的OGNL表達(dá)式使用

    這篇文章主要通過(guò)實(shí)例介紹了Java的Strus框架中的OGNL表達(dá)式使用,Struts框架是Java的SSH三大web開(kāi)發(fā)框架之一,需要的朋友可以參考下
    2015-11-11
  • java字符串壓縮解壓示例

    java字符串壓縮解壓示例

    這篇文章主要介紹了java字符串壓縮解壓示例,先壓縮,再加密,再壓縮,數(shù)據(jù)越大,壓縮比例越高,需要的朋友可以參考下
    2014-03-03
  • springboot2.x默認(rèn)使用的代理是cglib代理操作

    springboot2.x默認(rèn)使用的代理是cglib代理操作

    這篇文章主要介紹了springboot2.x默認(rèn)使用的代理是cglib代理操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • java如何從linux服務(wù)器下載文件

    java如何從linux服務(wù)器下載文件

    這篇文章主要介紹了java如何從linux服務(wù)器下載文件,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • java反射深入剖析(推薦)

    java反射深入剖析(推薦)

    下面小編就為大家?guī)?lái)一篇java反射深入剖析。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-07-07
  • Kafka producer端開(kāi)發(fā)代碼實(shí)例

    Kafka producer端開(kāi)發(fā)代碼實(shí)例

    這篇文章主要介紹了Kafka producer端開(kāi)發(fā)代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-11-11
  • 關(guān)于maven本地倉(cāng)庫(kù)的配置方式

    關(guān)于maven本地倉(cāng)庫(kù)的配置方式

    這篇文章主要介紹了關(guān)于maven本地倉(cāng)庫(kù)的配置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-06-06

最新評(píng)論