額,最近做微服務(wù)用到了Dto和entity。其實(shí)在這之前我做的項(xiàng)目都是直接entity實(shí)體前后交互的,所以這些概念多少略有涉及但也沒系統(tǒng)的理解過,這里簡(jiǎn)單做個(gè)整理。
POJO
(Plain Ordinary Java Object)簡(jiǎn)單的Java對(duì)象,實(shí)際就是普通JavaBeans,是為了避免和EJB混淆所創(chuàng)造的簡(jiǎn)稱。
??其中有一些屬性及其getter、setter方法的類,沒有業(yè)務(wù)邏輯,有時(shí)可以作為VO(value-object)或DTO(Data Transfer Object)來使用。不允許有業(yè)務(wù)方法,也不能攜帶connection之類的方法,實(shí)際就是普通JavaBeans。POJO類中可以有屬性和get、set方法,但是沒有業(yè)務(wù)邏輯。
JAVABean
JavaBean 是一種JAVA語(yǔ)言寫成的可重用組件。JavaBean符合一定規(guī)范編寫的Java類,不是一種技術(shù),而是一種規(guī)范。大家針對(duì)這種規(guī)范,總結(jié)了很多開發(fā)技巧、工具函數(shù)。符合這種規(guī)范的類,可以被其它的程序員或者框架使用。它的方法命名,構(gòu)造及行為必須符合特定的約定:
所有屬性為private。
這個(gè)類必須有一個(gè)公共的缺省構(gòu)造函數(shù)。即是提供無參數(shù)的構(gòu)造器。
這個(gè)類的屬性使用getter和setter來訪問,其他方法遵從標(biāo)準(zhǔn)命名規(guī)范。
這個(gè)類應(yīng)是可序列化的。實(shí)現(xiàn)serializable接口。
以上這些要求主要是靠約定而不是靠實(shí)現(xiàn)接口。另外javaBean是可以有方法的。
POJO和JAVABean區(qū)別
POJO其實(shí)是比javabean更純凈的簡(jiǎn)單類或接口。POJO嚴(yán)格地遵守簡(jiǎn)單對(duì)象的概念,而一些JavaBean中往往會(huì)封裝一些簡(jiǎn)單邏輯。
- POJO主要用于數(shù)據(jù)的臨時(shí)傳遞,它只能裝載數(shù)據(jù), 作為數(shù)據(jù)存儲(chǔ)的載體,而不具有業(yè)務(wù)邏輯處理的能力。
- Javabean雖然數(shù)據(jù)的獲取與POJO一樣,但是javabean當(dāng)中可以有其它的方法。
Entity
entity就是實(shí)體類,一般一個(gè)entity都是與數(shù)據(jù)庫(kù)中一個(gè)表對(duì)應(yīng)的。關(guān)于這個(gè)要求也沒有特定的定義,只有一些常用的規(guī)范:
1 .就是屬性類,通常定義在model層里面。
- 一般的實(shí)體類對(duì)應(yīng)一個(gè)數(shù)據(jù)表,其中的屬性對(duì)應(yīng)數(shù)據(jù)表中的字段(在沒有特殊情況下名字要駝峰對(duì)應(yīng))。
好處:
- 對(duì)對(duì)象實(shí)體的封裝,體現(xiàn)OO思想。
- 屬性可以對(duì)字段定義和狀態(tài)進(jìn)行判斷和過濾(比如非映射字段)
- 把相關(guān)信息用一個(gè)實(shí)體類封裝后,我們?cè)诔绦蛑锌梢园褜?shí)體類作為參數(shù)傳遞,更加方便(但是規(guī)范中一般不建議表的格式直接對(duì)外暴露)。
- 說白了就是為了讓程序員在對(duì)數(shù)據(jù)庫(kù)操作的時(shí)候不用寫SQL語(yǔ)句,就是一個(gè)數(shù)據(jù)庫(kù)表生成一個(gè)類,這樣做對(duì)數(shù)據(jù)庫(kù)操作起來方便。編寫代碼較少,提高效率,可以使程序員專注邏輯關(guān)系
在Java開發(fā)中經(jīng)常要定義一些實(shí)體類,這些類的定義的好壞會(huì)直接影響編寫代碼的質(zhì)量和難易程度,以下是別人總結(jié)的一些經(jīng)驗(yàn):
- 實(shí)體類的名字盡量和數(shù)據(jù)庫(kù)的表的名字對(duì)應(yīng)相同。
- 實(shí)體類應(yīng)該實(shí)現(xiàn)java.io.Serializable接口。
- 實(shí)體類應(yīng)該有個(gè)無參的構(gòu)造方法。
- 實(shí)體類有屬性和方法,屬性對(duì)應(yīng)數(shù)據(jù)庫(kù)中表的字段,主要有g(shù)etter和setter方法。
- 屬性一般是private類型,方法位public類型,對(duì)于數(shù)據(jù)庫(kù)自動(dòng)生成的ID字段對(duì)應(yīng)的屬性的set方法應(yīng)為private或者不生成set方法。
其實(shí)三者說到底都是java中的對(duì)象。只不過這三者是程序員根據(jù)不同的需求和使用場(chǎng)景人為的細(xì)分了三種名稱。單純的理論知識(shí),能清楚認(rèn)識(shí)挺好,不能清楚分辨也沒大事。剩下其實(shí)可以更加細(xì)分,比如vo,po,bo之類的,不過我也不打算整理記錄了。
這篇筆記就記到這里,如果能稍微幫到你了記得點(diǎn)個(gè)喜歡點(diǎn)個(gè)關(guān)注,另外也祝大家工作順順利利!java技術(shù)交流群130031711,歡迎各位萌新大佬踴躍加入!