開(kāi)發(fā)中POJO是DO, DTO和VO等的統(tǒng)稱。
DO是data object的縮寫,是數(shù)據(jù)對(duì)象的意思,一般和數(shù)據(jù)庫(kù)中的表相對(duì)應(yīng)。會(huì)放在domain包中。如果使用jpa開(kāi)發(fā),則DO的屬性會(huì)被@Id, @Column, @OneToMany, @OneToOne, @ManyToMany和@mappBy等注解修飾來(lái)建立數(shù)據(jù)對(duì)象跟數(shù)據(jù)庫(kù)表之間的映射關(guān)系,以及表之間的關(guān)聯(lián)關(guān)系。如果使用mybatis開(kāi)發(fā),則不需要注解修飾,只需要簡(jiǎn)單的Java對(duì)象就可以。
DAO是data access object的縮寫,是數(shù)據(jù)訪問(wèn)對(duì)象的意思。如果使用jpa開(kāi)發(fā),可以放在repository或者dao包中,并且是接口的形式,只需要繼承jpa提供的repository接口,并添加自定義方法即可,jpa提供了用curd的curdrepository和pagerepository等接口,用于簡(jiǎn)化常用操作。如果使用mybatis開(kāi)發(fā),一般放在mapper包中,同樣是接口形式,接口使用@Select, @Update, @Insert, @Delete等注解修飾,在注解中手寫SQL完成增刪改查等常用操作。
DTO是data transfer object的縮寫,意思是數(shù)據(jù)傳輸對(duì)象,會(huì)放在dto包中,用在service層,service層一般會(huì)調(diào)用DAO中定義的方法獲取DO對(duì)象,完成業(yè)務(wù)邏輯后,如果需要返回對(duì)象時(shí),會(huì)把對(duì)象組合或者轉(zhuǎn)化為DTO對(duì)象向外傳輸。轉(zhuǎn)化過(guò)程一般使用spring提供的BeanUtils類的copyproperties方法把DO對(duì)象的屬性復(fù)制到DTO對(duì)象里。
VO是view object的縮寫,意思是視圖對(duì)象,用于展示數(shù)據(jù)給用戶,用在controller層,是controller向外傳輸?shù)膶?duì)象,controller中一般會(huì)調(diào)用service層中類的方法獲取DTO對(duì)象,然后轉(zhuǎn)化為VO對(duì)象返回給調(diào)用端。
DO到DTO,再到VO的轉(zhuǎn)化,一方面是為了把數(shù)據(jù)返回給調(diào)用端,另一方面是為了安全,不把敏感信息返回給調(diào)用端。