POJO,PO,DTO,VO,BO
POJO (Plain Old Java Object)
簡單來講就是自動幫你建立private 的get 和 set。
通常實體層都是這樣拉出來的,很快。
PO (persistent object)
因為ORM的存在才有所謂的PO概念,可以簡單的將其視為資料庫Table和Java物件的對映
通常PO名詞跟hibernet有關
ORM (Object Relational Mapping)
物件關聯對映
通常是拿來串接DB和Model兩者之間,是一種更快速且安全的方式去讀取資料庫
ORM的優點
一、安全性
透過ORM可以避免掉SQL注入的攻擊手段
SQL注入就是在比如Email等輸出框中使用Delete或者Updata之類的手段進行破壞
因為使用ORM的話,參數會變成 age = txtNmae.where(age : 30)
二、簡化性
SQL 語法 SELECT * FROM TABLE WHERE (條件) =
TABLE = txtName.where(條件)
三、通用性
兩種資料庫通常會有不同的寫法 如mySql 和 msSql的寫法就不同
因此轉資料庫的時候可能導致語法上的錯誤
但是使用ORM就沒有這種困擾
缺點
一、效能
效能差有兩種原因,一種是因為ORM為了達到更方便的操作,因此寫了很多對於這個專案來說不必要的功能,因此速度自然比純SQL慢一些
不過上述其實是可忽略的慢,而第二種吃效能的原因通常是因為SQL沒有寫好導致,因此也不能算是ORM的問題
二、學習曲線高
ORM必須融合SQL和程式語言兩種語法,導致學習曲線較高
三、複雜查詢維護性低
對於複雜的查詢ORM較力不從心。
簡單來講ORM拿來快速建造CRUD應該是沒問題,更進階的可能就不太行了。
參考:
https://ithelp.ithome.com.tw/articles/10207752
DTO (Data Transfer Object)
傳輸用的物件,從PO提取物件之後,將資料往其他系統或服務丟的時候可以先透過DTO包裝。
VO (Value Object)
用於呈現時的資料包裝,將實體的資料(PO)轉換成抽象適合當前的物件。
可以很簡單一對一PO也可以很複雜一對多PO。
DAO (Data Access Object)
用於ORM將資料從資料庫提取的邏輯物件,主要邏輯為如何提取以及如何包裝成PO
BO (Business Object)
與PO和VO的差別在於,BO包含了複雜的商業邏輯
https://hackmd.io/@MonsterLee/HJyAdgRBB
留言
張貼留言