1. 引言
在本教程中,我們將學習如何創建一個能夠創建、檢索、更新和刪除(CRUD)客户端數據的應用程序。該應用程序將包括一個簡單的 Spring Boot RESTful API 和使用 React JavaScript 庫實現的用户界面(UI)。
2. Spring Boot
2.1. Maven Dependencies
讓我們從添加一些依賴到我們的 pom.xml 文件中開始:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>3.1.5</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
<version>3.1.5</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<version>3.1.5</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>2.1.214</version>
<scope>runtime</scope>
</dependency>
</dependencies>
我們添加了web、測試和JPA持久化啓動器,以及H2依賴,因為應用程序將有一個H2內存數據庫。
2.2. Creating the Model
接下來,我們創建一個 Client 實體類,具有 name 和 email 屬性,以表示我們的數據模型:
@Entity
@Table(name = "client")
public class Client {
@Id
@GeneratedValue
private Long id;
private String name;
private String email;
// getter, setters, contructors
}
2.3. Creating the Repository
然後我們將創建一個 ClientRepository 類 extending from JpaRepository 以提供JPA CRUD功能:
public interface ClientRepository extends JpaRepository<Client, Long> {
}
2.4. Creating the REST Controller
最後,我們將通過創建一個控制器來暴露一個 REST API by creating a controller 以與 ClientRepository 交互:
@RestController
@RequestMapping("/clients")
public class ClientsController {
private final ClientRepository clientRepository;
public ClientsController(ClientRepository clientRepository) {
this.clientRepository = clientRepository;
}
@GetMapping
public List<Client> getClients() {
return clientRepository.findAll();
}
@GetMapping("/{id}")
public Client getClient(@PathVariable Long id) {
return clientRepository.findById(id).orElseThrow(RuntimeException::new);
}
@PostMapping
public ResponseEntity createClient(@RequestBody Client client) throws URISyntaxException {
Client savedClient = clientRepository.save(client);
return ResponseEntity.created(new URI("/clients/" + savedClient.getId())).body(savedClient);
}
@PutMapping("/{id}")
public ResponseEntity updateClient(@PathVariable Long id, @RequestBody Client client) {
Client currentClient = clientRepository.findById(id).orElseThrow(RuntimeException::new);
currentClient.setName(client.getName());
currentClient.setEmail(client.getEmail());
currentClient = clientRepository.save(client);
return ResponseEntity.ok(currentClient);
}
@DeleteMapping("/{id}")
public ResponseEntity deleteClient(@PathVariable Long id) {
clientRepository.deleteById(id);
return ResponseEntity.ok().build();
}
}
2.5. Starting Our API
完成這些步驟後,我們現在可以啓動我們的 Spring Boot API。我們可以使用 spring-boot-maven-plugin 插件:
mvn spring-boot:run
然後我們可以通過訪問 http://localhost:8080/clients 來獲取我們的客户端列表。
2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients 2.6. Creating Clients