Java后端中dto、vo、entity的區(qū)別淺析
前言
在后端的項目開發(fā)中,我們經常會碰到一些包,比如dto、vo、entity,其中都會有一些實體類,但是每個包到底表示什么含義呢?
首先entity表示對數(shù)據庫中所有表的映射,是根據數(shù)據庫表字段設計出來的實體(要求表名與類名相同,字段名與成員變量名相同)
vo包表示前端頁面?zhèn)鬟^來的如表單等數(shù)據的字段,比如當前端填寫了一個表單,當前端傳過來的數(shù)據較多時,我們可以創(chuàng)建一個vo實體類,將前端傳來的數(shù)據字段名作為成員變量名,這樣我們就可以使用@RequestBody注解快速獲取參數(shù)內容,而不需要使用Request對象來一個個獲取,方便開發(fā)。
而dto包表示的是 vo和entity的一個中間轉換對象,是vo或entity對象中屬性的一個子對象。當前端傳來vo數(shù)據,我們提取vo中的數(shù)據到dto中,再將dto的數(shù)據處理后全部移動到entity中進行數(shù)據的保存。
反之亦然
舉個栗子
假如前端表單有數(shù)據 如下(id其實指的是用戶id):
id,username,age
而我們數(shù)據庫中的數(shù)據有(沒有age):
id,userId,username,createTime
這時我們controller層使用vo對象來接受前端傳過來的數(shù)據。
這時,我們要創(chuàng)建一個dto類作為vo與entity的中間轉換的對象(其實dto也可以看作在controller、service層的傳輸對象),這里創(chuàng)建的dto如下:
id、userId、username、createTime
我們要做的就是將vo對象做一定的處理后,然后創(chuàng)建出dto對象,在controller、service進行傳輸,最終再將service中的所有數(shù)據copy給entity,由dao層將entity數(shù)據存到數(shù)據庫中。
一個用于dto到entity的快速復制工具:
package com.swpu.utils; import java.util.ArrayList; import java.util.List; public class BeanCopyUtil { /** * 根據現(xiàn)有對象的屬性創(chuàng)建目標對象,并賦值 * * @param source * @param target * @param <T> * @return * @throws Exception */ public static <T> T copyObject(Object source, Class<T> target) { T temp = null; try { temp = target.newInstance(); if (null != source) { org.springframework.beans.BeanUtils.copyProperties(source, temp); } } catch (Exception e) { e.printStackTrace(); } return temp; } /** * 拷貝集合 * @param source * @param target * @param <T> * @param <S> * @return */ public static <T, S> List<T> copyList(List<S> source, Class<T> target) { List<T> list = new ArrayList<>(); if (null != source && source.size() > 0) { for (Object obj : source) { list.add(BeanCopyUtil.copyObject(obj, target)); } } return list; } }
總結
到此這篇關于Java后端中dto、vo、entity區(qū)別的文章就介紹到這了,更多相關后端dto、vo、entity區(qū)別內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
解決創(chuàng)建springboot后啟動報錯:Failed?to?bind?properties?under‘spri
在Spring?Boot項目中,application.properties和application.yml是用于配置參數(shù)的兩種文件格式,properties格式簡潔但不支持層次結構,而yml格式支持層次性,可讀性更好,在yml文件中,要注意細節(jié),比如冒號后面需要空格2024-10-10Mybatis useGeneratedKeys參數(shù)用法及問題小結
這篇文章主要介紹了Mybatis useGeneratedKeys參數(shù)用法及遇到的問題,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-05-05Java同學找工作最懵圈的問題:到底啥是分布式系統(tǒng)開發(fā)經驗?(推薦)
這篇文章主要介紹了分布式系統(tǒng)開發(fā)經驗,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-04-04IDEA 2020.3.X 創(chuàng)建scala環(huán)境的詳細教程
這篇文章主要介紹了IDEA 2020.3.X 創(chuàng)建scala環(huán)境的詳細教程,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-04-04