聊聊DTO,VO,PO的意義與他們之間的轉換

2021-10-14 15:37:42 字數 1441 閱讀 4566

dto(data transfer object):資料傳輸物件,這個概念**於j2ee的設計模式,原來的目的是為了ejb的分布式應用提供粗粒度的資料實體,以減少分布式呼叫的次數,從而提高分布式呼叫的效能和降低網路負載,但在這裡,我泛指用於展示層與服務層之間的資料傳輸物件。再通俗一點來說就是前端傳給後端的json資料其為資料庫對應實體的部分字段(這樣做的目的也很好理解,比如你在修改的介面使用的是完整實體,那麼你可能在前端只傳了你想要的改的,但是不排除其它情況的篡改,比如新增了別的不能修改的字段可能就會產生問題)

vo(view object):檢視物件,用於展示層,它的作用是把某個指定頁面(或元件)的所有資料封裝起來。通俗一點就是說你在後端介面處理完返回給前端的實但是vo這要前端想要的字段

po(persistent object):持久化物件,它跟持久層(通常是關係型資料庫)的資料結構形成一一對應的對映關係,如果持久層是關係型資料庫,那麼,資料表中的每個字段(或若干個)就對應po的乙個(或若干個)屬性。這就是vo裡說的資料庫完整的對映物件實體

這三個是常用的,可以通過**生成器來直接生成(愛了愛了)轉換器是用來將po,vo,dto 進行轉換的工具,直接上**:

org.mapstruct<

/groupid>

mapstruct<

/artifactid>

$<

/version>

<

/dependency>

這是mapstruct官網提供的乙個工具很好用

若源物件屬性與目標物件屬性名字一致,會自動對映對應屬性,不一樣的需要指定,也可以用 format 轉成自己想要的型別,也支援表示式的方式,可以看到像 id、name、email這些名詞一致的我並沒有指定 source-target,而birthday-birth指定了,轉換格式的 birthdateformat 加了dateformat 或者 birthexpressionformat 加了 expression,如果某個屬性你不想對映,可以加個 ignore=true

public

inte***ce

personconverter

) persondto domain2dto

(person person)

; person gerperson

(persondto persondto)

; list

domain2dto

(list

people);}

然後就會在target裡自動生成他的實現類

專案中直接注入轉換器,使用裡面自己定義的方法就可以

javascript 的 與 的意義

equality 等同,identity 恒等。兩邊值型別不同的時候,要先進行型別轉換,再比較。不做型別轉換,型別不同的一定不等。這個比較簡單。下面的規則用來判斷兩個值是否 相等 1 如果型別不同,就 不相等 2 如果兩個都是數值,並且是同乙個值,那麼 相等 例外 的是,如果其中至少乙個是nan,那...

與很酷的人談論他們的工作

chris mendez和usc廣播集團的moodles應用 大約一年半前,當我住在德克薩斯州時,聖安東尼奧ios 因此,我在audiokit的朋友問我是否要為其新門戶audiokit pro建立一些內容。重複同樣的格式,我藉此機會與我發現有趣的其他人chris mendez接觸 現在,我今天不寫這...

引用的意義與本質

1 引用作為其它變數的別名而存在,因此在一些場合可以代替指標 2 引用相對於指標來說具有更好的可讀性和實用性 引用本質思考 思考1 c 編譯器背後做了什麼工作?include using namespace std int main 引用是乙個有位址,引用是常量。char const p 引用的本質...