springboot第1集:由springboot的dto拓展的內(nèi)容

DTO:?Data Transfer Object. 通常是在 OpenApi . 即此項目與其他外界項目交互時使用的對象.
在Spring Boot應用程序中,數(shù)據(jù)傳輸對象(DTO)最常用于表示業(yè)務模型對象或從應用程序或其服務端點傳遞的數(shù)據(jù)模型對象。 DTO將這些模型對象中的數(shù)據(jù)轉換為一種便于傳輸和有效處理的格式。
通常情況下,DTO具有以下幾個作用:
將業(yè)務模型對象的詳細信息隱藏起來,以便在應用程序的客戶端和服務端之間進行數(shù)據(jù)傳輸。
將多個模型對象合并為一個DTO對象,以便簡化數(shù)據(jù)交換和處理過程。
通過將某些模型對象屬性的轉換或計算封裝到DTO中,可以抽象化服務端點之間的數(shù)據(jù)處理邏輯。
最終,提供一個整體的清晰,不分雙方,簡單的數(shù)據(jù)傳輸結構。
同樣,DTO在優(yōu)化性能方面也起到了很大的作用。
而Spring Boot可以通過各種注釋來高效地創(chuàng)建和使用DTO,這些注釋包括@Data
, @Getter
, @Setter
, @NoArgsConstructor
和@AllArgsConstructor
等。通過這些注釋,可以自動化DTO中的許多任務,這有效地簡化了DTO的創(chuàng)建和維護。
@Getter
@Setter
@TableName("user")
@ApiModel(value="user_boookdto",?description?=?"")
public?class?User_BookDto?implements?Serializable?{
?private?static?final?long?serialVersionUID?=?1L;
?
?@TableId("uid")
?private?String?uid;
?
?@TableField("uname")
?private?String?uname;
?
?@TableField("bname")
?private?String?bname;
?
?@TableField("author")
?private?String?author;
?
?@TableField("info")
?private?String?info;
?
?@TableField("imgpos")
?private?String?imgpos;
}
在Service里寫好方法,然后在impl里面實現(xiàn)
public?interface?BookService?extends?IService<Book>?{
?User_BookDto?getDataByUserAndBook(User_BookDto?user_bookDto);
}
實現(xiàn)service
根據(jù)前端傳過來的數(shù)據(jù)獲取這兩個表中的所有信息,然后使用對象拷貝,將兩個表中的數(shù)據(jù)對象拷貝到 dto,最后返回 dto 即可
@Service
public?class?BookServiceImp?extends?ServiceImpl<BookDao,?Book>?implements?BookService?{
?@Autowired
?private?UserService?userService;
?
?@Override
?public?User_BookDto?getDataByUserAndBook(User_BookDto?user_bookDto)?{
??//?獲取書的所有信息
??LambdaQueryWrapper<Book>?queryWrapper?=?new?LambdaQueryWrapper<>();
??queryWrapper.eq(Book::getBname,?user_bookDto.getBname());
??Book?book12?=?this.getOne(queryWrapper);
??
??//?獲取用戶的所有信息
??LambdaQueryWrapper<User>?queryWrapper2?=?new?LambdaQueryWrapper<>();
??queryWrapper2.eq(User::getUname,?user_bookDto.getUname());
??user?user12?=?userService.getOne(queryWrapper2);
??
??//?對象拷貝,將book和user拷貝到user_bookDto
??BeanUtils.copyProperties(book12,?user_bookDto);
??BeanUtils.copyProperties(user12,?user_bookDto);
??
??return?user_bookDto;
?}
}
最后,在 controller 里調用 service 寫好的方法即可
@PostMapping("/getub")
public?Result<User_BookDto>?getBook(@RequestBody?User_BookDto?user_bookDto)?{
?user_bookDto?=?bookService.getDataByUserAndBook(user_bookDto);
?return?Result.success("",?user_bookDto);
}
在Spring Boot中,DTO(Data Transfer Object)
是一種對象,用于在各個層之間傳遞數(shù)據(jù)。它們通常包含在應用程序中的控制器或服務中,并用于處理RESTful API或Web應用程序中的HTTP請求和響應數(shù)據(jù)。
DTO可以根據(jù)需要進行拓展,以滿足不同應用程序的要求。以下是可以拓展DTO的一些內(nèi)容:
Validation
校驗
Spring Boot DTO可以使用Bean Validation框架來校驗請求數(shù)據(jù)的格式和有效性。例如,你可以通過在DTO字段上添加@NotBlank和@Email注解來確保輸入的字符串不為空并符合電子郵件地址格式。
Mapping
映射
使用映射技術可以將一個DTO對象映射到另一個DTO對象,或將DTO對象映射到數(shù)據(jù)庫中的實體對象。例如,你可以使用MapStruct、Dozer或ModelMapper等框架來實現(xiàn)DTO映射功能。
Builder
構建
使用Builder模式創(chuàng)建DTO對象可以減少代碼的重復程度。通過使用Builder模式,你可以更簡單地構建DTO對象,而不必手動編寫大量的構造函數(shù)和setter方法。具體來說,你可以使用Lombok
來自動生成DTO對象的構建器。
Pagination
分頁
在Web應用程序中,常常需要對大量數(shù)據(jù)進行分頁顯示。DTO可以包含信息,例如當前頁碼、頁面大小、總數(shù)等,以支持分頁實現(xiàn)??梢允褂?code>Spring Boot默認的Pageable對象、Mybatis PageHelper插件等來實現(xiàn)分頁。
Custom Formatting
自定義格式
有些情況下,DTO對象需要顯示更復雜的數(shù)據(jù)結構,例如日期時間轉換、數(shù)字格式化等。你可以使用Spring Boot
中提供的自定義格式注解來實現(xiàn)DTO的自定義格式。 例如,對于日期的處理需要使用@DateTimeFormat(pattern = "yyyy-MM-dd")
注解進行標記。
Conversion
轉換
有時候,我們需要將DTO中的一些屬性從一種類型轉換成另一種類型,例如將字符串轉換成數(shù)字,或將日期字符串轉換為Date對象。你可以使用Spring Boot
中的ConversionService
來實現(xiàn)這種類型的轉換。
Localization
本地化
如果你的應用程序需要支持多個國家或地區(qū)的語言,那么DTO可以包含屬性鍵、相應的值和區(qū)域設置信息,來支持不同的本地化需求。你可以使用Spring Boot
的國際化支持來實現(xiàn)這個目標。
DTO Projection
投影
DTO Projection
允許我們選擇DTO中的特定屬性,并將這些屬性映射到視圖中。這可以減少不必要的數(shù)據(jù)傳輸和處理,從而提高應用程序的性能。你可以使用Spring Boot
中的Projection
注解來實現(xiàn)DTO的投影。
HATEOAS
支持
如果你正在構建RESTful API,則可以將DTO與HATEOAS(Hypertext As The Engine Of Application State)
相結合,以允許客戶端使用API返回的鏈接來導航應用程序。你可以使用Spring Boot中的Spring HATEOAS框架來實現(xiàn)這種類型的DTO擴展。
Spring Boot的DTO
(數(shù)據(jù)傳輸對象)通常是一個POJO(簡單Java對象),主要用于在不同層之間傳遞數(shù)據(jù),以及將數(shù)據(jù)庫實體轉換為更易于處理的對象。DTO
包含以下內(nèi)容:
可讀/可寫屬性:DTO包含用于表示數(shù)據(jù)的可讀/可寫屬性,具有
getter和setter
方法。靜態(tài)工廠方法:
DTO
通常具有靜態(tài)工廠方法,用于創(chuàng)建DTO
對象。序列化支持:
DTO
需要支持序列化和反序列化,以便它們可以在應用程序各個層之間進行傳輸。Bean
驗證注解:DTO可以包含Bean驗證注解,用于在傳輸數(shù)據(jù)之前驗證數(shù)據(jù)的完整性。映射注解:DTO可以使用映射注解(
例如@Mapper或@Mapping
)將DTO屬性映射到其他對象的屬性。Spring validation
支持:DTO可以使用Spring驗證框架進行自定義驗證。
總之,Spring Boot
的DTO是具有可讀/可寫屬性、靜態(tài)工廠方法、序列化支持、Bean驗證注解、映射注解和Spring驗證支持的簡單Java對象,用于在不同層之間傳輸數(shù)據(jù)。