dto
在Spring Boot的開發過程中,使用DTO(Data Transfer Object)層是一個很常見的做法。DTO層是在應用程式的業務邏輯層和資料訪問層之間引入的一箇中間層,用於在不同層之間傳輸資料。本文將介紹DTO層的基本語法和為什麼在Spring Boot開發中需要使用DTO層,並提供實際案例程式碼。
DTO(Data Transfer Object)主要是在應用程式的不同層之間傳輸資料,特別是從服務層到展示層(即控制器層),以及從展示層到客戶端。具體來說,DTO的作用和傳輸路徑如下:
從服務層到展示層:
- 服務層:處理業務邏輯,可能涉及到多個資料庫操作、計算等。
- 控制器層:接收HTTP請求,呼叫服務層的方法,然後將結果以DTO的形式返回給客戶端。
從客戶端到展示層:
- 客戶端:傳送包含資料的HTTP請求(例如POST請求)到伺服器。
- 展示層:接收請求,將請求體中的資料繫結到DTO物件。
- 服務層:處理DTO物件,進行業務邏輯處理,可能涉及儲存資料到資料庫等操作。
其實在之前的部落格當中,我們定義了一種返回給前端的格式,這就是一種傳輸模式
這次我們就簡單介紹一下與資料庫有交集的dto規範下的一種傳輸模式。
首先我們要定義好實體,就是我們資料庫的欄位,還是我們之前的那個資料庫,前兩篇文章可以看這裡
- [用一個專案把控制層、業務層、持久層說明白了,每一句話都講的很清楚 ](用一個專案把控制層、業務層、持久層說明白了,每一句話都講的很清楚 - ivanlee717 - 部落格園)
- lombok是怎麼用的 - ivanlee717 - 部落格園
我們希望用一個get請求傳進來的時候,返回對應id的賬戶資訊,用dto去傳輸是因為我們可能對同一個表進行多次的操作,每次返回不同的資訊,那麼直接對實體本身操作就會非常的複雜,所以我們單寫一個userDto類
package com.ivan.store.entity.dto;
import lombok.Data;
@Data
public class UserDto {
private String username;
private String password;
}
這個就是希望傳輸給前端的只有資料庫的賬號和密碼兩個欄位,然後加上註解就可以了。接下來去實現控制層的路徑:
@GetMapping("/{id}")
public UserDto findById(@PathVariable Integer id){
UserDto userDto = userService.findById(id);
return userDto;
}
@PathVariable 對映 URL 繫結的佔位符
透過 @PathVariable 可以將 URL 中佔位符引數繫結到控制器處理方法的入參中:URL 中的 {xxx} 佔位符可以透過@PathVariable(“xxx”) 繫結到操作方法的入參中。
將id弄到我們findById
方法裡面來尋找對應的資料,然後用dto格式返回。
public UserDto findById(Integer id){
User user = userMapper.findById(id);
UserDto userDto = new UserDto();
userDto.setUsername(user.getUsername());
userDto.setPassword(user.getPassword());
return userDto;
}
<select id="findById" resultMap="UserEntityMap">
SELECT * FROM t_user WHERE uid = #{id}
</select>
這樣寫好之後,我們就可以根據id來獲取到賬戶資訊來實現一個簡易的dto使用。