亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

SpringBoot 入門教程之引入數(shù)據(jù)傳輸層的方法

 更新時間:2020年07月16日 09:38:45   作者:悟三空  
這篇文章主要介紹了SpringBoot 入門教程之引入數(shù)據(jù)傳輸層的方法,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

我們現(xiàn)在操作的數(shù)據(jù)直接就使用了實體類,假如我們輸出的用戶對象需要包含用戶擁有的權(quán)限列表,那么我們怎么封裝呢?

直接封裝進實體類中顯然不行,因為實體類的職責(zé)就是提供與數(shù)據(jù)庫表字段一一對應(yīng)的映射關(guān)系,所以我們還需要封裝出一層數(shù)據(jù)傳輸層 DTO(Data Transfer Object),通過它暴露給外部,這樣我們就能高度定制化我們需要輸出的數(shù)據(jù)而不會影響到實體類。

在項目中創(chuàng)建 dto 目錄,新建 UserDto.java 文件:

package com.foxescap.wxbox.dto;

import lombok.Data;

import java.time.LocalDateTime;

/**
 * @author xfly
 */
@Data
public class UserDto {
 private String username;

 private LocalDateTime expiredAt;

 private LocalDateTime createdAt;
 
 private List<RoleDto> roles;
}

結(jié)構(gòu)看上去基本和對應(yīng)的實體類非常相似,職責(zé)區(qū)別就是:

• 我不想暴露出去的字段可以直接不聲明。

• 我可以加如其他的 DTO 作為其中的屬性,如上所示。

對應(yīng)我們的 Service 層就需要在拿到實體類對象后轉(zhuǎn)換成 DTO 對象:

public UserDto findByUsername(String username) {
 var user = lambdaQuery().eq(User::getUsername, username).one();
 var userDto = new UserDto();
 userDto.setUsername(user.getUsername());
 userDto.setExpiredAt(user.getExpiredAt());
 userDto.setCreatedAt(user.getCreatedAt());

 return userDto;
}

這里你會發(fā)現(xiàn),這個轉(zhuǎn)換的過程特別難受,就像寫 Getter 和 Setter 方法一樣,寫多了要吐了。

我會寫吐別人也一樣會寫吐,然后就會有輪子造出來,modelmapper就是解決這樣需求的一個用的人比較多的輪子。

在 pom.xml 項目配置文件中的 dependencies 中加入 modelmapper 依賴:

<dependency>
 <groupId>org.modelmapper</groupId>
 <artifactId>modelmapper</artifactId>
 <version>2.3.7</version>
</dependency>

然后在 config 目錄中的 WebMvcConfig.java 文件中注入這個對象:

@Bean
public ModelMapper modelMapper() {
 ModelMapper modelMapper = new ModelMapper();

 modelMapper.getConfiguration().setFullTypeMatchingRequired(true);
 modelMapper.getConfiguration().setMatchingStrategy(MatchingStrategies.STRICT);

 return modelMapper;
}

我們這個時候再來改造一下 findByUsername 方法:

private final ModelMapper modelMapper;

public UserService(ModelMapper modelMapper) {
 this.modelMapper = modelMapper;
}

public UserDto findByUsername(String username) {
 var user = lambdaQuery().eq(User::getUsername, username).one();

 return modelMapper.map(user, UserDto.class);
}

到此這篇關(guān)于SpringBoot 入門教程之引入數(shù)據(jù)傳輸層的方法的文章就介紹到這了,更多相關(guān)SpringBoot 引入數(shù)據(jù)傳輸層內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • TKMybatis的介紹和使用詳解

    TKMybatis的介紹和使用詳解

    TKMybatis 是基于 Mybatis 框架開發(fā)的一個工具,本文主要介紹了TKMybatis的介紹和使用詳解,內(nèi)部實現(xiàn)了對單表的基本數(shù)據(jù)操作,只需要簡單繼承 TKMybatis 提供的接口,就能夠?qū)崿F(xiàn)無需編寫任何 sql 即能完成單表操作,感興趣的可以了解一下
    2021-12-12
  • Java優(yōu)先隊列(PriorityQueue)重寫compare操作

    Java優(yōu)先隊列(PriorityQueue)重寫compare操作

    這篇文章主要介紹了Java優(yōu)先隊列(PriorityQueue)重寫compare操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10
  • Android 判斷真機和模擬器的方法

    Android 判斷真機和模擬器的方法

    這篇文章主要介紹了 Android 判斷真機和模擬器的方法的相關(guān)資料,需要的朋友可以參考下
    2017-02-02
  • Spring的DI依賴注入詳解

    Spring的DI依賴注入詳解

    這篇文章主要為大家介紹了Spring的DI依賴注入,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-01-01
  • 簡單驗證碼生成Java版

    簡單驗證碼生成Java版

    這篇文章主要為大家詳細(xì)介紹了簡單驗證碼生成Java版,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-11-11
  • Java數(shù)組的運用詳解

    Java數(shù)組的運用詳解

    這篇文章主要給大家介紹了關(guān)于Java中數(shù)組的定義和使用的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-08-08
  • java?NIO實現(xiàn)簡單聊天程序

    java?NIO實現(xiàn)簡單聊天程序

    這篇文章主要為大家詳細(xì)介紹了java?NIO實現(xiàn)簡單聊天程序,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • java 數(shù)據(jù)結(jié)構(gòu)并查集詳解

    java 數(shù)據(jù)結(jié)構(gòu)并查集詳解

    并查集是一種用來管理元素分組情況的數(shù)據(jù)結(jié)構(gòu)。并查集可以高效地進行如下操作。本文將通過Java實現(xiàn)并查集,感興趣的小伙伴可以了解一下
    2022-03-03
  • Java實現(xiàn)迅雷地址轉(zhuǎn)成普通地址實例代碼

    Java實現(xiàn)迅雷地址轉(zhuǎn)成普通地址實例代碼

    本篇文章主要介紹了Java實現(xiàn)迅雷地址轉(zhuǎn)成普通地址實例代碼,非常具有實用價值,有興趣的可以了解一下。
    2017-03-03
  • Spring Security角色繼承實現(xiàn)過程解析

    Spring Security角色繼承實現(xiàn)過程解析

    這篇文章主要介紹了Spring Security角色繼承實現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-08-08

最新評論