java中PO、VO、BO、POJO、DAO、DTO、TO、QO、Bean、conn的理解
O/R Mapping 是 Object Relational
Mapping (對象關(guān)系映射)的縮寫。通俗點(diǎn)講,就是將對象與關(guān)系數(shù)據(jù)庫綁定,用對象來表示關(guān)系數(shù)據(jù)。在 O/R
Mapping 的世界里,有兩個(gè)基本的也是重要的東東需要了解,即 VO , PO 。
VO ,值對象 (Value Object) ,
PO ,持久對象 (Persisent
Object) ,它們是由一組屬性和屬性的 get 和 set 方法組成。從結(jié)構(gòu)上看,它們并沒有什么不同的地方。但從其意義和本質(zhì)上來看是完全不同的。
1. VO 是用 new 關(guān)鍵字創(chuàng)建,由 GC 回收的。
PO 則是向數(shù)據(jù)庫中添加新數(shù)據(jù)時(shí)創(chuàng)建,刪除數(shù)據(jù)庫中數(shù)據(jù)時(shí)削除的。并且它只能存活在一個(gè)數(shù)據(jù)庫連接中,斷開連接即被銷毀。
2. VO 是值對象,精確點(diǎn)講它是業(yè)務(wù)對象,是存活在業(yè)務(wù)層的,是業(yè)務(wù)邏輯使用的,它存活的目的就是為數(shù)據(jù)提供一個(gè)生存的地方。
PO 則是有狀態(tài)的,每個(gè)屬性代表其當(dāng)前的狀態(tài)。它是物理數(shù)據(jù)的對象表示。使用它,可以使我們的程序與物理數(shù)據(jù)解耦,并且可以簡化對象數(shù)據(jù)與物理數(shù)據(jù)之間的轉(zhuǎn)換。
3. VO 的屬性是根據(jù)當(dāng)前業(yè)務(wù)的不同而不同的,也就是說,它的每一個(gè)屬性都一一對應(yīng)當(dāng)前業(yè)務(wù)邏輯所需要的數(shù)據(jù)的名稱。
PO 的屬性是跟數(shù)據(jù)庫表的字段一一對應(yīng)的。
PO 對象需要實(shí)現(xiàn)序列化接口。
java 的 (PO,VO,TO,BO,DAO,POJO) 解釋
PO(persistant object) 持久對象
在 o/r 映射的時(shí)候出現(xiàn)的概念,如果沒有 o/r 映射,沒有這個(gè)概念存在了。通常對應(yīng)數(shù)據(jù)模型 ( 數(shù)據(jù)庫 ), 本身還有部分業(yè)務(wù)邏輯的處理??梢钥闯墒桥c數(shù)據(jù)庫中的表相映射的 java 對象。最簡單的 PO 就是對應(yīng)數(shù)據(jù)庫中某個(gè)表中的一條記錄,多個(gè)記錄可以用 PO 的集合。 PO 中應(yīng)該不包含任何對數(shù)據(jù)庫的操作。
VO(value object) 值對象
通常用于業(yè)務(wù)層之間的數(shù)據(jù)傳遞,和 PO 一樣也是僅僅包含數(shù)據(jù)而已。但應(yīng)是抽象出的業(yè)務(wù)對象 , 可以和表對應(yīng) , 也可以不 , 這根據(jù)業(yè)務(wù)的需要 . 個(gè)人覺得同 DTO( 數(shù)據(jù)傳輸對象 ), 在 web 上傳遞。
TO(Transfer Object) ,數(shù)據(jù)傳輸對象
在應(yīng)用程序不同 tie( 關(guān)系 ) 之間傳輸?shù)膶ο?/p>
BO(business object) 業(yè)務(wù)對象
從業(yè)務(wù)模型的角度看 , 見 UML 元件領(lǐng)域模型中的領(lǐng)域?qū)ο蟆7庋b業(yè)務(wù)邏輯的 java 對象 , 通過調(diào)用 DAO 方法 , 結(jié)合 PO,VO 進(jìn)行業(yè)務(wù)操作。
business object: 業(yè)務(wù)對象
主要作用是把業(yè)務(wù)邏輯封裝為一個(gè)對象。這個(gè)對象可以包括一個(gè)或多個(gè)其它的對象。
比如一個(gè)簡歷,有教育經(jīng)歷、工作經(jīng)歷、社會關(guān)系等等。
我們可以把教育經(jīng)歷對應(yīng)一個(gè) PO ,工作經(jīng)歷對應(yīng)一個(gè) PO ,社會關(guān)系對應(yīng)一個(gè) PO 。
建立一個(gè)對應(yīng)簡歷的 BO 對象處理簡歷,每個(gè) BO 包含這些 PO 。
這樣處理業(yè)務(wù)邏輯時(shí),我們就可以針對 BO 去處理。
QO :查詢對象
POJO(plain ordinary java object) 簡單無規(guī)則 java 對象
純的傳統(tǒng)意義的 java 對象。就是說在一些 Object/Relation
Mapping 工具中,能夠做到維護(hù)數(shù)據(jù)庫表記錄的 persisent
object 完全是一個(gè)符合 Java Bean 規(guī)范的純 Java 對象,沒有增加別的屬性和方法。我的理解就是最基本的 Java Bean ,只有屬性字段及 setter 和 getter 方法!。
DAO(data access object) 數(shù)據(jù)訪問對象
是一個(gè) sun 的一個(gè)標(biāo)準(zhǔn) j2ee 設(shè)計(jì)模式, 這個(gè)模式中有個(gè)接口就是 DAO ,它負(fù)持久層的操作。為業(yè)務(wù)層提供接口。此對象用于訪問數(shù)據(jù)庫。通常和 PO 結(jié)合使用, DAO 中包含了各種數(shù)據(jù)庫的操作方法。通過它的方法 , 結(jié)合 PO 對數(shù)據(jù)庫進(jìn)行相關(guān)的操作。夾在業(yè)務(wù)邏輯與數(shù)據(jù)庫資源中間。配合 VO,
提供數(shù)據(jù)庫的 CRUD 操作 ...
DTO :
Data Transfer Object 數(shù)據(jù)傳輸對象
主要用于遠(yuǎn)程調(diào)用等需要大量傳輸對象的地方。
比如我們一張表有 100 個(gè)字段,那么對應(yīng)的 PO 就有 100 個(gè)屬性。
但是我們界面上只要顯示 10 個(gè)字段,
客戶端用 WEB service 來獲取數(shù)據(jù),沒有必要把整個(gè) PO 對象傳遞到客戶端,
這時(shí)我們就可以用只有這 10 個(gè)屬性的 DTO 來傳遞結(jié)果到客戶端,這樣也不會暴露服務(wù)端表結(jié)構(gòu) . 到達(dá)客戶端以后,如果用這個(gè)對象來對應(yīng)界面顯示,那此時(shí)它的身份就轉(zhuǎn)為 VO
DAO :數(shù)據(jù)訪問對象 —— 同時(shí)還有 DAO 模式
DTO :數(shù)據(jù)傳輸對象 —— 同時(shí)還有 DTO 模式
O/R Mapper 對象 / 關(guān)系 映射
定義好所有的 mapping 之后,這個(gè) O/R
Mapper 可以幫我們做很多的工作。通過這些 mappings, 這個(gè) O/R
Mapper 可以生成所有的關(guān)于對象保存,刪除,讀取的 SQL 語句,我們不再需要寫那么多行的 DAL 代碼了。
實(shí)體 Model( 實(shí)體模式 )
DAL( 數(shù)據(jù)訪問層 )
IDAL( 接口層 )
DALFactory( 類工廠 )
BLL( 業(yè)務(wù)邏輯層 )
BOF Business Object Framework 業(yè)務(wù)對象框架
SOA Service Orient Architecture 面向服務(wù)的設(shè)計(jì)
EMF Eclipse Model Framework
Eclipse 建??蚣?/p>
下面是個(gè)人理解
VO基本理解
value object:值對象
view object:表現(xiàn)層對象
簡要理解(部分人認(rèn)為同DTO有部分相同作用)
通常用于業(yè)務(wù)層之間的數(shù)據(jù)傳遞,主要對應(yīng)界面顯示的數(shù)據(jù)對象,他的對應(yīng)對象可以是一個(gè)WEB頁面,或者SWT、SWING的一個(gè)界面,通常用一個(gè)VO對象對應(yīng)整個(gè)界面的值;
O/R Mapper基本理解
Object Relational Mapping:對象/關(guān)系 映射*
作用
定義好所有的mapping之后,這個(gè)O/R Mapper可以幫我們做很多的工作;通過這些mappings,這個(gè)O/R Mapper可以生成所有的關(guān)于對象保存,刪除,讀取的SQL語句,我們不再需要寫那么多行的DAL代碼了
建議了解
在O/R Mapping的世界里,有兩個(gè)基本的也是重要的對象需要了解,即VO,PO
PO基本理解
persistant object :持久對象
注意
PO中應(yīng)該不包含任何對數(shù)據(jù)庫的操作!
簡介
在o/r映射的時(shí)候出現(xiàn)的概念,如果沒有o/r映射,就沒有這個(gè)概念存在了??梢钥闯墒桥c數(shù)據(jù)庫中的表相映射的java對象,一般包含數(shù)據(jù)模型(數(shù)據(jù)庫),部分業(yè)務(wù)邏輯;最簡單的PO就是對應(yīng)數(shù)據(jù)庫中某個(gè)表中的一條記錄,多個(gè)記錄可以用PO的集合;
簡要理解
PO對應(yīng)數(shù)據(jù)庫表,且數(shù)據(jù)庫表會映射一個(gè)PO(java對象),一個(gè)PO就是數(shù)據(jù)庫中的一條記錄,我們這可以把這條記錄作為一個(gè)對象處理,可以方便的轉(zhuǎn)為其它對象;
VO與PO區(qū)別
- VO是用new關(guān)鍵字創(chuàng)建,由GC回收的
- PO則是向數(shù)據(jù)庫中添加新數(shù)據(jù)時(shí)創(chuàng)建,刪除數(shù)據(jù)庫中數(shù)據(jù)時(shí)削除的。并且它只能存活在一個(gè)數(shù)據(jù)庫連接中,斷開連接即被銷毀
- VO是值對象,精確點(diǎn)講它是業(yè)務(wù)對象,是存活在業(yè)務(wù)層的,是業(yè)務(wù)邏輯使用的,它存活的目的就是為數(shù)據(jù)提供一個(gè)生存的地方
- PO則是有狀態(tài)的,每個(gè)屬性代表其當(dāng)前的狀態(tài)。它是物理數(shù)據(jù)的對象表示。使用它,可以使程序與物理數(shù)據(jù)解耦,并且可以簡化對象數(shù)據(jù)與物理數(shù)據(jù)之間的轉(zhuǎn)換
- VO的屬性是根據(jù)當(dāng)前業(yè)務(wù)的不同而不同的,也就是說,它的每一個(gè)屬性都一一對應(yīng)當(dāng)前業(yè)務(wù)邏輯所需要的數(shù)據(jù)的名稱
- PO的屬性是跟數(shù)據(jù)庫表的字段一一對應(yīng)的
- PO對象需要實(shí)現(xiàn)序列化接口
BO基本理解
business object:業(yè)務(wù)對象
簡要理解
封裝業(yè)務(wù)邏輯的java對象,通過調(diào)用DAO方法,結(jié)合PO,VO進(jìn)行業(yè)務(wù)操作 ;
理解(BO統(tǒng)籌PO)
主要作用是把業(yè)務(wù)邏輯封裝為一個(gè)對象。這個(gè)對象可以包括一個(gè)或多個(gè)其它的對象。
比如一個(gè)簡歷,有教育經(jīng)歷、工作經(jīng)歷、社會關(guān)系等等。
我們可以把教育經(jīng)歷對應(yīng)一個(gè)PO,工作經(jīng)歷對應(yīng)一個(gè)PO,社會關(guān)系對應(yīng)一個(gè)PO。
建立一個(gè)對應(yīng)簡歷的BO對象處理簡歷,每個(gè)BO包含這些PO。
這樣處理業(yè)務(wù)邏輯時(shí),我們就可以針對BO去處理。
POJO基本理解
plain ordinary java object:簡單無規(guī)則java對象
簡介
單純的傳統(tǒng)意義的java對象。就是說在一些Object/Relation Mapping工具中,能夠做到維護(hù)數(shù)據(jù)庫表記錄的persisent object完全是一個(gè)符合Java Bean規(guī)范的純Java對象,沒有增加別的屬性和方法。我的理解就是最基本的Java Bean,只有屬性字段及setter和getter方法
簡要理解
POJO首先區(qū)別于其他對象,同時(shí)是最常見最多變的一個(gè)中間常用對象
不同場景下POJO的代表
- 一個(gè)POJO持久化以后就是PO
- 直接用它傳遞、傳遞過程中就是DTO
- 直接用來對應(yīng)表示層就是VO
DAO(常用)基本理解
data access object:數(shù)據(jù)訪問對象
簡介
一個(gè)標(biāo)準(zhǔn)j2ee設(shè)計(jì)模式,夾在業(yè)務(wù)邏輯與數(shù)據(jù)庫資源中間,通過DAO接口訪問數(shù)據(jù)庫,DAO中包含了各種數(shù)據(jù)庫的操作方法(CRUD操作),通過它的方法,結(jié)合PO對數(shù)據(jù)庫進(jìn)行相關(guān)的操作,基本沒有互相轉(zhuǎn)化的可能性和必要;同時(shí)可以通過它把POJO持久化為PO,用PO組裝出來VO、DTO ~
簡要理解
通常和PO結(jié)合使用,DAO中包含了各種數(shù)據(jù)庫的操作方法;通過它的方法 , 結(jié)合PO對數(shù)據(jù)庫進(jìn)行相關(guān)的操作;配合VO,提供數(shù)據(jù)庫的CRUD(增刪改查)操作
DTO(較少用,過渡作用)基本理解
Data Transfer Object:數(shù)據(jù)傳輸對象
簡要理解
主要用于遠(yuǎn)程調(diào)用需要大量傳輸對象的地方
列子理解
比如我們一張表有100個(gè)字段,那么對應(yīng)的PO就有100個(gè)屬性.
但是我們界面上只要顯示10個(gè)字段,
客戶端用WEB service來獲取數(shù)據(jù),沒有必要把整個(gè)PO對象傳遞到客戶端,
這時(shí)我們就可以用只有這10個(gè)屬性的DTO來傳遞結(jié)果到客戶端,這樣也不會暴露服務(wù)端表結(jié)構(gòu).到達(dá)客戶端以后,如果用這個(gè)對象來對應(yīng)界面顯示,那此時(shí)它的身份就轉(zhuǎn)為VO
TO基本理解
Transfer Object:數(shù)據(jù)傳輸對象
簡要理解
在應(yīng)用程序不同tie(關(guān)系)之間傳輸?shù)膶ο?/p>
QO基本理解
Query Object:查詢對象
簡要理解
存儲一些與持久性查詢操作的語句對象
DO基本理解
Domain Object:領(lǐng)域?qū)ο?/p>
簡要理解
就是從現(xiàn)實(shí)世界中抽象出來的有形或無形的業(yè)務(wù)實(shí)體
最后再介紹下Bean,Conn
Bean包就是專門放置屬性類的,比如在數(shù)據(jù)庫中創(chuàng)建了一個(gè)表,那么你可以把這個(gè)表的各個(gè)字段,分別定義成屬性放置在一個(gè)類里,并寫明setter和getter方法,然后把這個(gè)類放置在bean包下面。
Conn建立了一個(gè)數(shù)據(jù)庫連接對象,其他所有涉及到數(shù)據(jù)庫操作的文件都需要包含這個(gè)文件并引用該對象。
更多關(guān)于java中PO、VO、BO、POJO、DAO、DTO、TO、QO、Bean、conn的理解請查看下面的相關(guān)鏈接
相關(guān)文章
基于Springboot實(shí)現(xiàn)送水公司信息管理系統(tǒng)
這篇文章主要介紹了基于Springboot實(shí)現(xiàn)送水公司信息管理,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-01-01
IDEA中的Run/Debug Configurations各項(xiàng)解讀
這篇文章主要介紹了IDEA中的Run/Debug Configurations各項(xiàng)解讀,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-09-09
解決Springboot @Autowired 無法注入問題
WebappApplication 一定要在包的最外層,否則Spring無法對所有的類進(jìn)行托管,會造成@Autowired 無法注入。接下來給大家介紹解決Springboot @Autowired 無法注入問題,感興趣的朋友一起看看吧2018-08-08
java.lang.ExceptionInInitializerError初始化程序中的異常錯(cuò)誤的解決
java.lang.ExceptionInInitializerError?異常在?Java?中表示一個(gè)錯(cuò)誤,該錯(cuò)誤發(fā)生在嘗試初始化一個(gè)類的靜態(tài)變量、靜態(tài)代碼塊或枚舉常量時(shí),本文就來介紹并解決一下,感興趣的可以了解一下2024-05-05
Spring Boot Controller處理HTTP請求體的方法
Spring Boot提供了強(qiáng)大的機(jī)制來處理不同 Content-Type? 的HTTP請求體,這主要依賴于 HttpMessageConverter? 接口的各種實(shí)現(xiàn),它們能夠自動將請求體內(nèi)容轉(zhuǎn)換成Java方法參數(shù),本文給大家介紹Spring Boot Controller處理HTTP請求體的方法,感興趣的朋友一起看看吧2025-05-05
java 二維數(shù)組矩陣乘法的實(shí)現(xiàn)方法
java 二維數(shù)組矩陣乘法的實(shí)現(xiàn)方法,需要的朋友可以參考一下2013-03-03
關(guān)于SpringCloud分布式系統(tǒng)中實(shí)現(xiàn)冪等性的幾種方式
這篇文章主要介紹了關(guān)于SpringCloud分布式系統(tǒng)中實(shí)現(xiàn)冪等性的幾種方式,冪等函數(shù),或冪等方法,是指可以使用相同參數(shù)重復(fù)執(zhí)行,并能獲得相同結(jié)果的函數(shù),這些函數(shù)不會影響系統(tǒng)狀態(tài),也不用擔(dān)心重復(fù)執(zhí)行會對系統(tǒng)造成改變,需要的朋友可以參考下2023-10-10

