国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

DTO,VO,PO的意義與他們之間的轉(zhuǎn)換

這篇具有很好參考價(jià)值的文章主要介紹了DTO,VO,PO的意義與他們之間的轉(zhuǎn)換。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

DTO(Data Transfer Object):數(shù)據(jù)傳輸對象,這個(gè)概念來源于J2EE的設(shè)計(jì)模式,原來的目的是為了EJB的分布式應(yīng)用提供粗粒度的數(shù)據(jù)實(shí)體,以減少分布式調(diào)用的次數(shù),從而提高分布式調(diào)用的性能和降低網(wǎng)絡(luò)負(fù)載,但在這里,我泛指用于展示層與服務(wù)層之間的數(shù)據(jù)傳輸對象。再通俗一點(diǎn)來說就是前端傳給后端的JSON數(shù)據(jù)其為數(shù)據(jù)庫對應(yīng)實(shí)體的部分字段(這樣做的目的也很好理解,比如你在修改的接口使用的是完整實(shí)體,那么你可能在前端只傳了你想要的改的,但是不排除其它情況的篡改,比如添加了別的不能修改的字段可能就會(huì)產(chǎn)生問題)
VO(View Object):視圖對象,用于展示層,它的作用是把某個(gè)指定頁面(或組件)的所有數(shù)據(jù)封裝起來。通俗一點(diǎn)就是說你在后端接口處理完返回給前端的實(shí)但是VO這要前端想要的字段
PO(Persistent Object):持久化對象,它跟持久層(通常是關(guān)系型數(shù)據(jù)庫)的數(shù)據(jù)結(jié)構(gòu)形成一一對應(yīng)的映射關(guān)系,如果持久層是關(guān)系型數(shù)據(jù)庫,那么,數(shù)據(jù)表中的每個(gè)字段(或若干個(gè))就對應(yīng)PO的一個(gè)(或若干個(gè))屬性。這就是VO里說的數(shù)據(jù)庫完整的映射對象實(shí)體
這三個(gè)是常用的,可以通過代碼生成器來直接生成
轉(zhuǎn)換器:
轉(zhuǎn)換器是用來將PO,VO,DTO 進(jìn)行轉(zhuǎn)換的工具,直接上代碼:
?

   <dependency>
            <groupId>org.mapstruct</groupId>
            <artifactId>mapstruct</artifactId>
            <version>${org.mapstruct.version}</version>
        </dependency>

這是MapStruct官網(wǎng)提供的一個(gè)工具很好用
若源對象屬性與目標(biāo)對象屬性名字一致,會(huì)自動(dòng)映射對應(yīng)屬性,不一樣的需要指定,也可以用 format 轉(zhuǎn)成自己想要的類型,也支持表達(dá)式的方式,可以看到像 id、name、email這些名詞一致的我并沒有指定 source-target,而birthday-birth指定了,轉(zhuǎn)換格式的 birthDateFormat 加了dateFormat 或者 birthExpressionFormat 加了 expression,如果某個(gè)屬性你不想映射,可以加個(gè) ignore=true
?

@Mapper
public interface PersonConverter {
    PersonConverter INSTANCE = Mappers.getMapper(PersonConverter.class);
    @Mappings({
        @Mapping(source = "birthday", target = "birth"),
        @Mapping(source = "birthday", target = "birthDateFormat", dateFormat = "yyyy-MM-dd HH:mm:ss"),
        @Mapping(target = "birthExpressionFormat", expression = "java(org.apache.commons.lang3.time.DateFormatUtils.format(person.getBirthday(),\"yyyy-MM-dd HH:mm:ss\"))"),
        @Mapping(source = "user.age", target = "age"),
        @Mapping(target = "email", ignore = true)
    })
    PersonDTO domain2dto(Person person);
    Person gerPerson(PersonDTO personDTO);
    List<PersonDTO> domain2dto(List<Person> people);
}

然后就會(huì)在target里自動(dòng)生成他的實(shí)現(xiàn)類
項(xiàng)目中直接注入轉(zhuǎn)換器,使用里面自己定義的方法就可以

 Person person= PersonConverter.INSTANCE.getPerson(personDTO);

MapStruct 注解的關(guān)鍵詞
@Mapper 只有在接口加上這個(gè)注解, MapStruct 才會(huì)去實(shí)現(xiàn)該接口
@Mapper 里有個(gè) componentModel 屬性,主要是指定實(shí)現(xiàn)類的類型,一般用到兩個(gè)
default:默認(rèn),可以通過 Mappers.getMapper(Class) 方式獲取實(shí)例對象
spring:在接口的實(shí)現(xiàn)類上自動(dòng)添加注解 @Component,可通過 @Autowired 方式注入
@Mapping:屬性映射,若源對象屬性與目標(biāo)對象名字一致,會(huì)自動(dòng)映射對應(yīng)屬性
source:源屬性
target:目標(biāo)屬性
dateFormat:String 到 Date 日期之間相互轉(zhuǎn)換,通過 SimpleDateFormat,該值為 SimpleDateFormat 的日期格式
ignore: 忽略這個(gè)字段
@Mappings:配置多個(gè)@Mapping
@MappingTarget 用于更新已有對象
@InheritConfiguration 用于繼承配置

要查看完整功能可參考官網(wǎng):
?文章來源地址http://www.zghlxwxcb.cn/news/detail-672702.html

http://mapstruct.org/documentation/stable/reference/html/

到了這里,關(guān)于DTO,VO,PO的意義與他們之間的轉(zhuǎn)換的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Java:PO、VO、BO、DO、DAO、DTO、POJO

    Java:PO、VO、BO、DO、DAO、DTO、POJO

    ??wei_shuo的個(gè)人主頁 ??wei_shuo的學(xué)習(xí)社區(qū) ??Hello World ! PO是持久化對象,用于表示數(shù)據(jù)庫中的實(shí)體或表的映射 通常與數(shù)據(jù)庫表的結(jié)構(gòu)和字段對應(yīng) PO的屬性對應(yīng)數(shù)據(jù)庫表的字段,可以進(jìn)行持久化操作(存儲(chǔ)、讀取、更新、刪除) VO是值對象,用于封裝數(shù)據(jù) 通常是不可變的,

    2024年02月12日
    瀏覽(49)
  • VO和DTO有什么區(qū)別?

    ????????在Java開發(fā)中,VO和DTO都是用于數(shù)據(jù)傳輸?shù)膶ο螅鼈兊暮x和用途有所不同。 VO(Value Object)通常是用于表示業(yè)務(wù)領(lǐng)域中的一個(gè)值對象,它是一個(gè)純粹的數(shù)據(jù)對象,主要用于封裝從業(yè)務(wù)層傳遞到UI層的數(shù)據(jù),以便于UI層展示或者接收用戶輸入。VO通常不包含業(yè)務(wù)邏

    2024年02月10日
    瀏覽(20)
  • Java:do、dto、bo、ao、vo、pojo

    普通的Java對象,是一種簡單的JavaBean,主要用于數(shù)據(jù)傳輸。POJO類除了屬性和必要的getter/setter方法外,沒有其他的業(yè)務(wù)邏輯和特殊的操作,通常作為數(shù)據(jù)模型使用。 實(shí)現(xiàn)類DO(Data Access Object)是一種用于訪問和操作數(shù)據(jù)庫數(shù)據(jù)的設(shè)計(jì)模式,它允許您定義一個(gè)數(shù)據(jù)訪問對象,以

    2023年04月08日
    瀏覽(39)
  • springboot中entity層、dto層、vo層通俗理解三者的區(qū)別

    entity :這個(gè)類的屬性是跟數(shù)據(jù)庫字段一模一樣的(駝峰命名),當(dāng)我們使用MyBatis-Plus的時(shí)候經(jīng)常用得到。 dto :用于后端接收前端返回的數(shù)據(jù),一般是post請求,前端會(huì)給我們返回一個(gè)json對象,我們這個(gè)dto就用于接收這個(gè)json對象,dto的每個(gè)屬性名和json對象的key是對應(yīng)的。 v

    2024年02月10日
    瀏覽(18)
  • JAVA - PO DTO 生成器

    假設(shè)你是一個(gè)Java 高級(jí)程序員,我會(huì)提供一些信息,你需要幫我自動(dòng)生成Java的PO、DTO 對象。 這些信息有著固定的形式,第一行是對象的類名,其后的每一行都是該對象的屬性(簡稱“屬性”)。 對于我屬性,格式可能是小駝峰的形式,可能是全大寫命名法的格式,我需要你自動(dòng)

    2024年02月10日
    瀏覽(22)
  • 后端開發(fā)基礎(chǔ)概念 Entity,DAO,DO,DTO,VO, Service,Controller

    Entity主要用于ORM(對象關(guān)系映射)框架中,如Hibernate、MyBatis等,以便將數(shù)據(jù)庫中的數(shù)據(jù)映射為對象,方便進(jìn)行業(yè)務(wù)操作。 Entity通常與數(shù)據(jù)庫表一一對應(yīng),代表 業(yè)務(wù)數(shù)據(jù) 的基本單元。 通常放在項(xiàng)目的model或entity包下。 ? DAO(數(shù)據(jù)訪問對象): DAO是連接業(yè)務(wù)邏輯和數(shù)據(jù)庫的橋

    2024年04月08日
    瀏覽(26)
  • 簡單易懂的理解java開發(fā)中的 DO、BO、DTO、VO、AO都是什么?

    這些只是開發(fā)的規(guī)范,規(guī)范就是建議遵守的,大家都這樣做,長期以來就形成了一種開發(fā)規(guī)范,便于我們開發(fā)。 DO、BO、DTO、VO、AO他們都是普 通的Java類 ,只不過通常我們把他們放在DO、BO、DTO、VO、AO名的包下,結(jié)尾以DO、BO、DTO、VO、AO命名放在這些包下的類。 有時(shí)DO也會(huì)放在

    2024年02月01日
    瀏覽(28)
  • springboot蒼穹外賣實(shí)戰(zhàn):一、環(huán)境搭建(nginx啟動(dòng)失敗解決方案+Entity、DTO、VO、POJO區(qū)別說明+nio.charset.Input length = 2報(bào)錯(cuò)解決)

    springboot蒼穹外賣實(shí)戰(zhàn):一、環(huán)境搭建(nginx啟動(dòng)失敗解決方案+Entity、DTO、VO、POJO區(qū)別說明+nio.charset.Input length = 2報(bào)錯(cuò)解決)

    在資料的day01中有個(gè)“前端運(yùn)行環(huán)境”的文件夾,將其中的\\\"nginx-1.20.2\\\"文件夾解壓到 非中文目錄 下,然后直接點(diǎn)擊文件夾中的nginx.exe(閃退不要緊)。 然后在瀏覽器中直接輸入localhost,如果出現(xiàn)以下頁面,即說明前端啟動(dòng)成功。 啟動(dòng)失敗解決方案 如果沒有,可能原因是80端

    2024年04月12日
    瀏覽(272)
  • 狀態(tài)模式——對象狀態(tài)及其轉(zhuǎn)換

    狀態(tài)模式——對象狀態(tài)及其轉(zhuǎn)換

    在軟件系統(tǒng)中,有些對象也像水一樣具有多種狀態(tài),這些狀態(tài)在某些情況下能夠相互轉(zhuǎn)換,而且對象在不同的狀態(tài)下也將具有不同的行為。為了更好地對這些具有多種狀態(tài)的對象進(jìn)行設(shè)計(jì),可以使用一種被稱為狀態(tài)模式的設(shè)計(jì)模式。 狀態(tài)模式用于解決系統(tǒng)中復(fù)雜對象的狀態(tài)轉(zhuǎn)

    2024年02月14日
    瀏覽(20)
  • 狀態(tài)模式-對象狀態(tài)及其轉(zhuǎn)換

    狀態(tài)模式-對象狀態(tài)及其轉(zhuǎn)換

    ?某信用卡業(yè)務(wù)系統(tǒng),銀行賬戶存在3種狀態(tài),且在不同狀態(tài)下存在不同的行為: 1)正常狀態(tài)(余額大等于0),用戶可以存款也可以取款; 2)透支狀態(tài)(余額小于0且大于-2000),用戶可以存款也可以取款,但需要對欠款支付利息。 3)受限狀態(tài)(余額小等于-2000),用戶只能

    2024年02月08日
    瀏覽(22)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包