国产成人精品18p,天天干成人网,无码专区狠狠躁天天躁,美女脱精光隐私扒开免费观看

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

發(fā)布時(shí)間:2021-07-06 11:13 來(lái)源:腳本之家 閱讀:0 作者:是小張啊 欄目: 開(kāi)發(fā)技術(shù) 歡迎投稿:712375056

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

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

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

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

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

現在有一個(gè)用戶(hù)實(shí)體

import lombok.Data;

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

    /**
     * 用戶(hù)名稱(chēng)(賬號)
     */
    private String name;

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

現在需要返回一個(gè)VO的對象 即

import lombok.Data;

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

    /**
     * 用戶(hù)名稱(chēng)(賬號)
     */
    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 {

    /**
     * 查詢(xún)用戶(hù)
     * @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)題的 不談性能 這樣做是非常穩的

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

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 {

    /**
     * 查詢(xún)用戶(hù)
     * @return
     */
    public List<UserVo> select() {
        // 初始化數據
        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í)也挺不錯的 只是每次都這樣寫(xiě) 屬實(shí)不美觀(guān) 如果能提取公共方法去調用就太舒服了 所以這個(gè)方法也是根據 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 工具類(lèi)
 * @author 是小張啊
 * @since 2021-05-06
 */
@Slf4j
public class Utils extends BeanUtils {
   
    /**
     * 將實(shí)體批量轉換成 vo對象
     * 注:當前只針對 List
     *
     * @param source 實(shí)體集合
     * @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  )建一個(gè)新的實(shí)例
                t = clazz.newInstance();
                BeanUtils.copyProperties(resources, t);
            } catch (InstantiationException e) {
                log.info("{}實(shí)例化失敗", clazz);
            } catch (IllegalAccessException e) {
                log.info("{}不可訪(fǎng)問(wèn)", 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 {

    /**
     * 查詢(xún)用戶(hù)
     * @return
     */
    public List<UserVo> select() {
        // 初始化數據
        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字段值是一樣的

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

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

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自本網(wǎng)站內容采集于網(wǎng)絡(luò )互聯(lián)網(wǎng)轉載等其它媒體和分享為主,內容觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如侵犯了原作者的版權,請告知一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容,聯(lián)系我們QQ:712375056,同時(shí)歡迎投稿傳遞力量。

亚洲AV无码精品色午夜果冻| 国产成人精品午夜二三区波多野| 亚洲综合一区无码精品| 免费在线视频,无码| 久久水蜜桃亚洲AV无码精品麻豆| AV一本久道久久综合久久鬼色|