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

Java詳解entity轉(zhuǎn)換到vo過(guò)程

 更新時(shí)間:2022年06月22日 10:54:08   作者:ifredom  
這篇文章將用實(shí)例來(lái)和大家介紹一下entity轉(zhuǎn)換到vo的方法過(guò)程。文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Java有一定的幫助,需要的可以參考一下

起因

使用 mybatis-plus 操作后獲得的數(shù)據(jù)類(lèi)型為 Entity,但是前端界面往往需要展示一些其他的字段數(shù)據(jù),此時(shí)就需要 將 Entity 轉(zhuǎn)化為 Vo。

那么他們?nèi)叩年P(guān)系是什么呢?面向的使用對(duì)象不同

entity: 對(duì)應(yīng)數(shù)據(jù)庫(kù)表模型

vo: 對(duì)應(yīng)需要返回到前端的數(shù)據(jù)模型

dto: 對(duì)應(yīng)后臺(tái)內(nèi)部調(diào)用的數(shù)據(jù)模型

package com.springblog.entity.vo;
import lombok.Data;
import java.io.Serializable;
@Data
public class BlogVo implements Serializable {
    private String title;
    /**
     * 前端需要展示的其他字段
     */
    private String otherProperty;
}
package com.springblog.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import java.time.LocalDateTime;
import java.io.Serializable;
import lombok.Data;
import javax.validation.constraints.NotBlank;
@Data
@TableName("m_blog")
public class BlogEntity implements Serializable {
    private static final long serialVersionUID = 1L;
    @TableId(value = "id", type = IdType.AUTO)
    private Long id;
    private String title;
    private String description;
    private String content;
    private LocalDateTime created;
}

1. 將Entity轉(zhuǎn)化為Vo

    @GetMapping("/one/{id}")
    public R oneDefine(@PathVariable(name = "id") Long id) {
        BlogEntity blogEntity = blogService.queryBlogById(id);
        BlogVo blogVo = new BlogVo();
        BeanUtil.copyProperties(blogEntity,blogVo);
        blogVo.setOtherProperty("前端展示額外字段");
        return R.ok().put("data", blogVo);
    }

2. 將List<Entity>轉(zhuǎn)換為L(zhǎng)ist<Vo>

如果采用最簡(jiǎn)單粗暴的方式,那么這個(gè)過(guò)程應(yīng)該是這樣的:

  • 創(chuàng)建一個(gè)臨時(shí)ArrayList
  • 遍歷 List ,并在內(nèi)部調(diào)用工具類(lèi)方法BeanUtil.copyProperties(source,target)將每一個(gè)Entity轉(zhuǎn)化為vo
  • 將每一個(gè)復(fù)制轉(zhuǎn)換后的voItem 通過(guò)add()方法添加到臨時(shí)創(chuàng)建的List中

過(guò)于繁瑣,這很不好

    @GetMapping("/list1")
    public R list1(@RequestBody Map<String, Object> params) {
        QueryWrapper<BlogEntity> queryWrapper = new QueryWrapper<>();
        List<BlogEntity> list = blogMapper.selectList(queryWrapper);
        ArrayList<BlogVo> voList = new ArrayList<>();
        list.forEach(item->{
            BlogVo voItem = new BlogVo();
            BeanUtil.copyProperties(item,voItem);
            voList.add(voItem);
        });
        return R.ok().put("data", voList);
    }

封裝到工具類(lèi)后使用

封裝后,將 Entity 轉(zhuǎn)化為 Vo

    @GetMapping("/one/{id}")
    public R oneDefine(@PathVariable(name = "id") Long id) {
        BlogEntity blogEntity = blogService.queryBlogById(id);
        BlogVo blogVo = ConvertUtil.entityToVo(blogEntity, BlogVo.class);
        blogVo.setOtherProperty("前端展示額外字段");
        return R.ok().put("data", blogVo);
    }

封裝后,將 List<Entity> 轉(zhuǎn)換為L(zhǎng)ist<Vo>

    @GetMapping("/list1")
    public R list1(@RequestBody Map<String, Object> params) {
        QueryWrapper<BlogEntity> queryWrapper = new QueryWrapper<>();
        List<BlogEntity> list = blogMapper.selectList(queryWrapper);
        List<BlogVo> blogVos = ConvertUtil.entityToVoList(list, BlogVo.class);
        return R.ok().put("data", blogVos);
    }

性能以及原理

  • 使用Spring提供的BeanUtil在日常使用足夠了,如果涉及到數(shù)據(jù)量很大的情況,復(fù)制就比較耗時(shí)了,推介使用Mapstruct。
  • Spring和Apache的BeanUtils則是用到了反射機(jī)制,都是淺拷貝
  • MapStruct使用注解處理器生成實(shí)現(xiàn)類(lèi),實(shí)現(xiàn)類(lèi)內(nèi)部是原生的new對(duì)象,然后SetXxx/getXxx方式賦值進(jìn)行數(shù)據(jù)拷貝的,類(lèi)似lombok
  • Apache提供的BeanUtils相對(duì)使用的較少

ConvertUtil工具類(lèi)源碼

package com.springblog.common.utils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
/**
 * @Author ifredom
 * @Description 類(lèi)型轉(zhuǎn)換: Entity - Vo轉(zhuǎn)換
 * @Date 2022/5/10 15:59
 * @Param [params]
 **/
public class ConvertUtil {
    public static final Logger logger = LoggerFactory.getLogger(ConvertUtil.class);
    public static <T> T entityToVo(Object source, Class<T> target) {
        if (source == null) {
            return null;
        }
        T targetObject = null;
        try {
            targetObject = target.newInstance();
            BeanUtils.copyProperties(source, targetObject);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return targetObject;
    }
    public static <T> List<T> entityToVoList(Collection<?> sourceList, Class<T> target) {
        if (sourceList == null) {
            return null;
        }
        List<T> targetList = new ArrayList<>(sourceList.size());
        try {
            for (Object source : sourceList) {
                T targetObject = target.newInstance();
                BeanUtils.copyProperties(source, targetObject);
                targetList.add(targetObject);
            }
        } catch (Exception e) {
            logger.error("convert error ", e);
        }
        return targetList;
    }
}

到此這篇關(guān)于Java詳解entity轉(zhuǎn)換到vo過(guò)程的文章就介紹到這了,更多相關(guān)Java entity轉(zhuǎn)vo內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Spring Boot多數(shù)據(jù)源及其事務(wù)管理配置方法

    Spring Boot多數(shù)據(jù)源及其事務(wù)管理配置方法

    本篇文章主要介紹了Spring Boot多數(shù)據(jù)源及其事務(wù)管理配置方法,具有一定的參考價(jià)值,有興趣的可以了解一下。
    2017-04-04
  • Java?鏈表實(shí)戰(zhàn)真題訓(xùn)練

    Java?鏈表實(shí)戰(zhàn)真題訓(xùn)練

    跟著思路走,之后從簡(jiǎn)單題入手,反復(fù)去看,做過(guò)之后可能會(huì)忘記,之后再做一次,記不住就反復(fù)做,反復(fù)尋求思路和規(guī)律,慢慢積累就會(huì)發(fā)現(xiàn)質(zhì)的變化
    2022-04-04
  • java實(shí)現(xiàn)的連接數(shù)據(jù)庫(kù)及模糊查詢(xún)功能示例

    java實(shí)現(xiàn)的連接數(shù)據(jù)庫(kù)及模糊查詢(xún)功能示例

    這篇文章主要介紹了java實(shí)現(xiàn)的連接數(shù)據(jù)庫(kù)及模糊查詢(xún)功能,結(jié)合實(shí)例形式分析了java基于jdbc連接數(shù)據(jù)庫(kù)及使用LIKE語(yǔ)句實(shí)現(xiàn)模糊查詢(xún)功能的相關(guān)操作技巧,需要的朋友可以參考下
    2017-12-12
  • springboot application無(wú)法使用$獲取pom變量的問(wèn)題及解決

    springboot application無(wú)法使用$獲取pom變量的問(wèn)題及解決

    這篇文章主要介紹了springboot application無(wú)法使用$獲取pom變量的問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • idea創(chuàng)建項(xiàng)目沒(méi)有webapp文件夾的解決方法

    idea創(chuàng)建項(xiàng)目沒(méi)有webapp文件夾的解決方法

    本文主要介紹了idea創(chuàng)建項(xiàng)目沒(méi)有webapp文件夾的解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • Java使用Junit4.jar進(jìn)行單元測(cè)試的方法

    Java使用Junit4.jar進(jìn)行單元測(cè)試的方法

    今天通過(guò)本文給大家介紹Java使用Junit4.jar進(jìn)行單元測(cè)試的方法,本文通過(guò)圖文實(shí)例相結(jié)合給大家介紹的非常詳細(xì),需要的朋友參考下吧
    2021-11-11
  • mybatis項(xiàng)目CRUD步驟實(shí)例詳解

    mybatis項(xiàng)目CRUD步驟實(shí)例詳解

    這篇文章主要介紹了mybatis項(xiàng)目CRUD步驟,包括pom.xml引入相應(yīng)的依賴(lài),在resources目錄下寫(xiě)配置文件,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-09-09
  • JAVA?String常用方法超詳細(xì)講解

    JAVA?String常用方法超詳細(xì)講解

    String其實(shí)是Java庫(kù)中的一個(gè)預(yù)定義的類(lèi),String不是基本類(lèi)型,而是引用類(lèi)型,使用引用類(lèi)型的變量稱(chēng)為引用變量,它引用一個(gè)對(duì)象,下面這篇文章主要給大家介紹了關(guān)于JAVA?String常用方法的相關(guān)資料,需要的朋友可以參考下
    2024-04-04
  • 詳解Java文件下載的幾種實(shí)現(xiàn)方式

    詳解Java文件下載的幾種實(shí)現(xiàn)方式

    這篇文章主要介紹了詳解Java文件下載的幾種實(shí)現(xiàn)方式,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-12-12
  • Java讀取圖片EXIF信息的方法

    Java讀取圖片EXIF信息的方法

    這篇文章主要介紹了Java讀取圖片EXIF信息的方法,較為詳細(xì)的分析了圖片EXIF信息的概念、功能及java讀取EXIF信息的實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2015-07-07

最新評(píng)論

越西县| 昆明市| 莲花县| 襄樊市| 廉江市| 拉萨市| 时尚| 孟州市| 井陉县| 莱芜市| 甘孜县| 丹东市| 英吉沙县| 洪湖市| 白沙| 琼结县| 昌黎县| 孟连| 克什克腾旗| 北碚区| 桦南县| 兰州市| 黎川县| 平陆县| 肇东市| 乐至县| 林甸县| 潼关县| 鸡西市| 平泉县| 耿马| 福州市| 岑溪市| 伊川县| 惠州市| 曲水县| 澄迈县| 泰顺县| 定兴县| 永清县| 黄平县|