java中PO、VO、BO、POJO、DAO、DTO、TO、QO、Bean、conn的理解
O/R Mapping 是 Object Relational
Mapping (對象關(guān)系映射)的縮寫。通俗點講,就是將對象與關(guān)系數(shù)據(jù)庫綁定,用對象來表示關(guān)系數(shù)據(jù)。在 O/R
Mapping 的世界里,有兩個基本的也是重要的東東需要了解,即 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ù)時創(chuàng)建,刪除數(shù)據(jù)庫中數(shù)據(jù)時削除的。并且它只能存活在一個數(shù)據(jù)庫連接中,斷開連接即被銷毀。
2. VO 是值對象,精確點講它是業(yè)務(wù)對象,是存活在業(yè)務(wù)層的,是業(yè)務(wù)邏輯使用的,它存活的目的就是為數(shù)據(jù)提供一個生存的地方。
PO 則是有狀態(tài)的,每個屬性代表其當(dāng)前的狀態(tài)。它是物理數(shù)據(jù)的對象表示。使用它,可以使我們的程序與物理數(shù)據(jù)解耦,并且可以簡化對象數(shù)據(jù)與物理數(shù)據(jù)之間的轉(zhuǎn)換。
3. VO 的屬性是根據(jù)當(dāng)前業(yè)務(wù)的不同而不同的,也就是說,它的每一個屬性都一一對應(yīng)當(dāng)前業(yè)務(wù)邏輯所需要的數(shù)據(jù)的名稱。
PO 的屬性是跟數(shù)據(jù)庫表的字段一一對應(yīng)的。
PO 對象需要實現(xiàn)序列化接口。
java 的 (PO,VO,TO,BO,DAO,POJO) 解釋
PO(persistant object) 持久對象
在 o/r 映射的時候出現(xiàn)的概念,如果沒有 o/r 映射,沒有這個概念存在了。通常對應(yīng)數(shù)據(jù)模型 ( 數(shù)據(jù)庫 ), 本身還有部分業(yè)務(wù)邏輯的處理??梢钥闯墒桥c數(shù)據(jù)庫中的表相映射的 java 對象。最簡單的 PO 就是對應(yīng)數(shù)據(jù)庫中某個表中的一條記錄,多個記錄可以用 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ù)的需要 . 個人覺得同 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ū)ο?。封裝業(yè)務(wù)邏輯的 java 對象 , 通過調(diào)用 DAO 方法 , 結(jié)合 PO,VO 進行業(yè)務(wù)操作。
business object: 業(yè)務(wù)對象
主要作用是把業(yè)務(wù)邏輯封裝為一個對象。這個對象可以包括一個或多個其它的對象。
比如一個簡歷,有教育經(jīng)歷、工作經(jīng)歷、社會關(guān)系等等。
我們可以把教育經(jīng)歷對應(yīng)一個 PO ,工作經(jīng)歷對應(yīng)一個 PO ,社會關(guān)系對應(yīng)一個 PO 。
建立一個對應(yīng)簡歷的 BO 對象處理簡歷,每個 BO 包含這些 PO 。
這樣處理業(yè)務(wù)邏輯時,我們就可以針對 BO 去處理。
QO :查詢對象
POJO(plain ordinary java object) 簡單無規(guī)則 java 對象
純的傳統(tǒng)意義的 java 對象。就是說在一些 Object/Relation
Mapping 工具中,能夠做到維護數(shù)據(jù)庫表記錄的 persisent
object 完全是一個符合 Java Bean 規(guī)范的純 Java 對象,沒有增加別的屬性和方法。我的理解就是最基本的 Java Bean ,只有屬性字段及 setter 和 getter 方法!。
DAO(data access object) 數(shù)據(jù)訪問對象
是一個 sun 的一個標準 j2ee 設(shè)計模式, 這個模式中有個接口就是 DAO ,它負持久層的操作。為業(yè)務(wù)層提供接口。此對象用于訪問數(shù)據(jù)庫。通常和 PO 結(jié)合使用, DAO 中包含了各種數(shù)據(jù)庫的操作方法。通過它的方法 , 結(jié)合 PO 對數(shù)據(jù)庫進行相關(guān)的操作。夾在業(yè)務(wù)邏輯與數(shù)據(jù)庫資源中間。配合 VO,
提供數(shù)據(jù)庫的 CRUD 操作 ...
DTO :
Data Transfer Object 數(shù)據(jù)傳輸對象
主要用于遠程調(diào)用等需要大量傳輸對象的地方。
比如我們一張表有 100 個字段,那么對應(yīng)的 PO 就有 100 個屬性。
但是我們界面上只要顯示 10 個字段,
客戶端用 WEB service 來獲取數(shù)據(jù),沒有必要把整個 PO 對象傳遞到客戶端,
這時我們就可以用只有這 10 個屬性的 DTO 來傳遞結(jié)果到客戶端,這樣也不會暴露服務(wù)端表結(jié)構(gòu) . 到達客戶端以后,如果用這個對象來對應(yīng)界面顯示,那此時它的身份就轉(zhuǎn)為 VO
DAO :數(shù)據(jù)訪問對象 —— 同時還有 DAO 模式
DTO :數(shù)據(jù)傳輸對象 —— 同時還有 DTO 模式
O/R Mapper 對象 / 關(guān)系 映射
定義好所有的 mapping 之后,這個 O/R
Mapper 可以幫我們做很多的工作。通過這些 mappings, 這個 O/R
Mapper 可以生成所有的關(guān)于對象保存,刪除,讀取的 SQL 語句,我們不再需要寫那么多行的 DAL 代碼了。
實體 Model( 實體模式 )
DAL( 數(shù)據(jù)訪問層 )
IDAL( 接口層 )
DALFactory( 類工廠 )
BLL( 業(yè)務(wù)邏輯層 )
BOF Business Object Framework 業(yè)務(wù)對象框架
SOA Service Orient Architecture 面向服務(wù)的設(shè)計
EMF Eclipse Model Framework
Eclipse 建??蚣?/p>
下面是個人理解
VO基本理解
value object:值對象
view object:表現(xiàn)層對象
簡要理解(部分人認為同DTO有部分相同作用)
通常用于業(yè)務(wù)層之間的數(shù)據(jù)傳遞,主要對應(yīng)界面顯示的數(shù)據(jù)對象,他的對應(yīng)對象可以是一個WEB頁面,或者SWT、SWING的一個界面,通常用一個VO對象對應(yīng)整個界面的值;
O/R Mapper基本理解
Object Relational Mapping:對象/關(guān)系 映射*
作用
定義好所有的mapping之后,這個O/R Mapper可以幫我們做很多的工作;通過這些mappings,這個O/R Mapper可以生成所有的關(guān)于對象保存,刪除,讀取的SQL語句,我們不再需要寫那么多行的DAL代碼了
建議了解
在O/R Mapping的世界里,有兩個基本的也是重要的對象需要了解,即VO,PO
PO基本理解
persistant object :持久對象
注意
PO中應(yīng)該不包含任何對數(shù)據(jù)庫的操作!
簡介
在o/r映射的時候出現(xiàn)的概念,如果沒有o/r映射,就沒有這個概念存在了。可以看成是與數(shù)據(jù)庫中的表相映射的java對象,一般包含數(shù)據(jù)模型(數(shù)據(jù)庫),部分業(yè)務(wù)邏輯;最簡單的PO就是對應(yīng)數(shù)據(jù)庫中某個表中的一條記錄,多個記錄可以用PO的集合;
簡要理解
PO對應(yīng)數(shù)據(jù)庫表,且數(shù)據(jù)庫表會映射一個PO(java對象),一個PO就是數(shù)據(jù)庫中的一條記錄,我們這可以把這條記錄作為一個對象處理,可以方便的轉(zhuǎn)為其它對象;
VO與PO區(qū)別
- VO是用new關(guān)鍵字創(chuàng)建,由GC回收的
- PO則是向數(shù)據(jù)庫中添加新數(shù)據(jù)時創(chuàng)建,刪除數(shù)據(jù)庫中數(shù)據(jù)時削除的。并且它只能存活在一個數(shù)據(jù)庫連接中,斷開連接即被銷毀
- VO是值對象,精確點講它是業(yè)務(wù)對象,是存活在業(yè)務(wù)層的,是業(yè)務(wù)邏輯使用的,它存活的目的就是為數(shù)據(jù)提供一個生存的地方
- PO則是有狀態(tài)的,每個屬性代表其當(dāng)前的狀態(tài)。它是物理數(shù)據(jù)的對象表示。使用它,可以使程序與物理數(shù)據(jù)解耦,并且可以簡化對象數(shù)據(jù)與物理數(shù)據(jù)之間的轉(zhuǎn)換
- VO的屬性是根據(jù)當(dāng)前業(yè)務(wù)的不同而不同的,也就是說,它的每一個屬性都一一對應(yīng)當(dāng)前業(yè)務(wù)邏輯所需要的數(shù)據(jù)的名稱
- PO的屬性是跟數(shù)據(jù)庫表的字段一一對應(yīng)的
- PO對象需要實現(xiàn)序列化接口
BO基本理解
business object:業(yè)務(wù)對象
簡要理解
封裝業(yè)務(wù)邏輯的java對象,通過調(diào)用DAO方法,結(jié)合PO,VO進行業(yè)務(wù)操作 ;
理解(BO統(tǒng)籌PO)
主要作用是把業(yè)務(wù)邏輯封裝為一個對象。這個對象可以包括一個或多個其它的對象。
比如一個簡歷,有教育經(jīng)歷、工作經(jīng)歷、社會關(guān)系等等。
我們可以把教育經(jīng)歷對應(yīng)一個PO,工作經(jīng)歷對應(yīng)一個PO,社會關(guān)系對應(yīng)一個PO。
建立一個對應(yīng)簡歷的BO對象處理簡歷,每個BO包含這些PO。
這樣處理業(yè)務(wù)邏輯時,我們就可以針對BO去處理。
POJO基本理解
plain ordinary java object:簡單無規(guī)則java對象
簡介
單純的傳統(tǒng)意義的java對象。就是說在一些Object/Relation Mapping工具中,能夠做到維護數(shù)據(jù)庫表記錄的persisent object完全是一個符合Java Bean規(guī)范的純Java對象,沒有增加別的屬性和方法。我的理解就是最基本的Java Bean,只有屬性字段及setter和getter方法
簡要理解
POJO首先區(qū)別于其他對象,同時是最常見最多變的一個中間常用對象
不同場景下POJO的代表
- 一個POJO持久化以后就是PO
- 直接用它傳遞、傳遞過程中就是DTO
- 直接用來對應(yīng)表示層就是VO
DAO(常用)基本理解
data access object:數(shù)據(jù)訪問對象
簡介
一個標準j2ee設(shè)計模式,夾在業(yè)務(wù)邏輯與數(shù)據(jù)庫資源中間,通過DAO接口訪問數(shù)據(jù)庫,DAO中包含了各種數(shù)據(jù)庫的操作方法(CRUD操作),通過它的方法,結(jié)合PO對數(shù)據(jù)庫進行相關(guān)的操作,基本沒有互相轉(zhuǎn)化的可能性和必要;同時可以通過它把POJO持久化為PO,用PO組裝出來VO、DTO ~
簡要理解
通常和PO結(jié)合使用,DAO中包含了各種數(shù)據(jù)庫的操作方法;通過它的方法 , 結(jié)合PO對數(shù)據(jù)庫進行相關(guān)的操作;配合VO,提供數(shù)據(jù)庫的CRUD(增刪改查)操作
DTO(較少用,過渡作用)基本理解
Data Transfer Object:數(shù)據(jù)傳輸對象
簡要理解
主要用于遠程調(diào)用需要大量傳輸對象的地方
列子理解
比如我們一張表有100個字段,那么對應(yīng)的PO就有100個屬性.
但是我們界面上只要顯示10個字段,
客戶端用WEB service來獲取數(shù)據(jù),沒有必要把整個PO對象傳遞到客戶端,
這時我們就可以用只有這10個屬性的DTO來傳遞結(jié)果到客戶端,這樣也不會暴露服務(wù)端表結(jié)構(gòu).到達客戶端以后,如果用這個對象來對應(yīng)界面顯示,那此時它的身份就轉(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)實世界中抽象出來的有形或無形的業(yè)務(wù)實體
最后再介紹下Bean,Conn
Bean包就是專門放置屬性類的,比如在數(shù)據(jù)庫中創(chuàng)建了一個表,那么你可以把這個表的各個字段,分別定義成屬性放置在一個類里,并寫明setter和getter方法,然后把這個類放置在bean包下面。
Conn建立了一個數(shù)據(jù)庫連接對象,其他所有涉及到數(shù)據(jù)庫操作的文件都需要包含這個文件并引用該對象。
更多關(guān)于java中PO、VO、BO、POJO、DAO、DTO、TO、QO、Bean、conn的理解請查看下面的相關(guān)鏈接
相關(guān)文章
Java中HashTable和HashMap的區(qū)別_動力節(jié)點Java學(xué)院整理
HashTable和HashMap主要的區(qū)別有:線程安全性,同步(synchronization),以及速度。接下來通過本文給大家簡單介紹下HashTable和HashMap的區(qū)別,需要的的朋友參考下吧2017-04-04Java多線程編程之使用Exchanger數(shù)據(jù)交換實例
這篇文章主要介紹了Java多線程編程之使用Exchanger數(shù)據(jù)交換實例,本文直接給出實例代碼,需要的朋友可以參考下2015-05-05Java實現(xiàn)的進制轉(zhuǎn)換工具類完整示例
這篇文章主要介紹了Java實現(xiàn)的進制轉(zhuǎn)換工具類,結(jié)合完整實例形式分析了Java實現(xiàn)二進制、十六進制、字符串、數(shù)組等相關(guān)轉(zhuǎn)換操作技巧,需要的朋友可以參考下2018-07-07有關(guān)IntelliJ IDEA中LeetCode插件配置問題
這篇文章主要介紹了關(guān)于IntelliJ IDEA中LeetCode插件配置問題,本文給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-08-08詳解springboot項目帶Tomcat和不帶Tomcat的兩種打包方式
這篇文章主要介紹了詳解springboot項目帶Tomcat和不帶Tomcat的兩種打包方式,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09Java Spring詳解如何配置數(shù)據(jù)源注解開發(fā)以及整合Junit
Spring 是目前主流的 Java Web 開發(fā)框架,是 Java 世界最為成功的框架。該框架是一個輕量級的開源框架,具有很高的凝聚力和吸引力,本篇文章帶你了解如何配置數(shù)據(jù)源、注解開發(fā)以及整合Junit2021-10-10springboot基于keytool實現(xiàn)https的雙向認證示例教程
這篇文章主要介紹了springboot基于keytool實現(xiàn)https的雙向認證,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2023-06-06