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

Java編寫的實體返回VO工具

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

好久不見 最近些許有點懶惰 程序員嘛 每個月總會有幾天的 你懂得

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

所以我最近寫了一個小工具 就是實體轉換VO對象的一個小工具 說到這里 如果你的第一反應是 Spring的BeanUtils 那說明你肯定也有遇到過跟我一樣的問題

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

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

現(xiàn)在有一個用戶實體

import lombok.Data;

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

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

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

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

import lombok.Data;

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

    /**
     * 用戶名稱(賬號)
     */
    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;
    }
}

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

現(xiàn)在有這樣的一個需求 需要返回一個 List<UserVo> 如果你能想到用 java8的lambda表達式的去使用Spring的BeanUtils 那也是不錯的
具體實現(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;
    }

}

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

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 {
   
    /**
     * 將實體批量轉換成 vo對象
     * 注:當前只針對 List
     *
     * @param source 實體集合
     * @param clazz  需要批量轉換成的對象
     * @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)建一個新的實例
                t = clazz.newInstance();
                BeanUtils.copyProperties(resources, t);
            } catch (InstantiationException e) {
                log.info("{}實例化失敗", clazz);
            } catch (IllegalAccessException e) {
                log.info("{}不可訪問", clazz);
            }
            return t;
        }).collect(Collectors.toList());
    }
}

這樣就很方便 只需要去調用即可

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 是有局限性的 你必須保證 實體的字段值和返回的VO字段值是一樣的

代碼寫到最后 其實就是一個不斷優(yōu)化的過程 領導來了 不能多說 得繼續(xù)搬磚去了

以上就是Java編寫的實體返回VO工具的詳細內容,更多關于Java 實體返回VO工具的資料請關注腳本之家其它相關文章!

相關文章

  • Java 自定義注解的魅力

    Java 自定義注解的魅力

    這篇文章主要介紹了Java 自定義注解的相關資料,幫助大家更好的理解和學習使用Java,感興趣的朋友可以了解下
    2021-03-03
  • struts2攔截器_動力節(jié)點Java學院整理

    struts2攔截器_動力節(jié)點Java學院整理

    如何使用struts2攔截器,或者自定義攔截器。下面通過實例代碼給大家分享struts2攔截器的相關知識,感興趣的朋友參考下吧
    2017-09-09
  • 使用JMeter從JSON響應的URL參數(shù)中提取特定值

    使用JMeter從JSON響應的URL參數(shù)中提取特定值

    在使用Apache JMeter進行API測試時,我們經常需要從JSON格式的響應中提取特定字段的值,這可以通過使用JMeter內置的JSON提取器和正則表達式提取器來完成,本文介紹JMeter JSON提取特定值的相關知識,感興趣的朋友跟隨小編一起看看吧
    2024-03-03
  • java學習之猜數(shù)字小游戲

    java學習之猜數(shù)字小游戲

    這篇文章主要為大家詳細介紹了java學習之猜數(shù)字小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • SpringBoot配置SwaggerUI訪問404錯誤的解決方法

    SpringBoot配置SwaggerUI訪問404錯誤的解決方法

    這篇文章主要為大家詳細介紹了SpringBoot配置SwaggerUI訪問404錯誤的解決方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • SpringBoot整合Mybatis無法掃描xml文件的解決

    SpringBoot整合Mybatis無法掃描xml文件的解決

    這篇文章主要介紹了SpringBoot整合Mybatis無法掃描xml文件的解決操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • Java?數(shù)據(jù)結構與算法系列精講之隊列

    Java?數(shù)據(jù)結構與算法系列精講之隊列

    這篇文章主要介紹了Java隊列數(shù)據(jù)結構的實現(xiàn),隊列是一種特殊的線性表,只允許在表的隊頭進行刪除操作,在表的后端進行插入操作,隊列是一個有序表先進先出,想了解更多相關資料的小伙伴可以參考下面文章的詳細內容
    2022-02-02
  • Java并發(fā)編程之ConcurrentLinkedQueue源碼詳解

    Java并發(fā)編程之ConcurrentLinkedQueue源碼詳解

    今天帶小伙伴們學習一下Java并發(fā)編程之Java ConcurrentLinkedQueue源碼,本篇文章詳細分析了ConcurrentLinkedQueue源碼,有代碼示例,對正在學習java的小伙伴們很有幫助喲,需要的朋友可以參考下
    2021-05-05
  • Java并發(fā) 結合源碼分析AQS原理

    Java并發(fā) 結合源碼分析AQS原理

    這篇文章主要介紹了Java并發(fā) 結合源碼分析AQS原理,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-10-10
  • shardingsphered 線程安全問題示例分析

    shardingsphered 線程安全問題示例分析

    這篇文章主要為大家介紹了shardingsphered 線程安全問題示例分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-06-06

最新評論

瑞安市| 西安市| 辽中县| 天峻县| 米脂县| 寿光市| 库车县| 长葛市| 新宾| 桦南县| 肇源县| 永康市| 施秉县| 迭部县| 美姑县| 海南省| 修武县| 渝中区| 临湘市| 乐安县| 郎溪县| 锦屏县| 永清县| 铜川市| 玉屏| 郎溪县| 田阳县| 湘乡市| 松原市| 宣汉县| 衡水市| 曲阜市| 六安市| 基隆市| 夏津县| 苏尼特右旗| 沭阳县| 黑河市| 绿春县| 报价| 高清|