POJO、JAVABean、Entity的區(qū)別

額,最近做微服務(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)造及行為必須符合特定的約定:

  1. 所有屬性為private。

  2. 這個(gè)類必須有一個(gè)公共的缺省構(gòu)造函數(shù)。即是提供無參數(shù)的構(gòu)造器。

  3. 這個(gè)類的屬性使用getter和setter來訪問,其他方法遵從標(biāo)準(zhǔn)命名規(guī)范。

  4. 這個(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層里面。

  1. 一般的實(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):

  1. 實(shí)體類的名字盡量和數(shù)據(jù)庫(kù)的表的名字對(duì)應(yīng)相同。
  2. 實(shí)體類應(yīng)該實(shí)現(xiàn)java.io.Serializable接口。
  3. 實(shí)體類應(yīng)該有個(gè)無參的構(gòu)造方法。
  4. 實(shí)體類有屬性和方法,屬性對(duì)應(yīng)數(shù)據(jù)庫(kù)中表的字段,主要有g(shù)etter和setter方法。
  5. 屬性一般是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,歡迎各位萌新大佬踴躍加入!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容