原
2024.08.05
16
こんにちは!原です!
前回作成した users テーブルに対する
CRUD を作成していきます。
src/main/java/com/example/user/entity
に Users
Entity を作成します。
パッケージが user.entity に変わっていますので、注意してください。
JPAにおいて、@GeneratedValue
を使って主キーにユニークな値を自動で生成し、@Id
を持つフィルドに適用できます。
package com.example.user.entity;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
@Entity
public class Users {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String name;
private String email;
// Getters and Setters
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
src/main/java/com/example/user/repository
ディレクトリに UsersRepository
インターフェースを作成します。
package com.example.user.repository;
import org.springframework.data.jpa.repository.JpaRepository;
import com.example.user.entity.Users;
public interface UsersRepository extends JpaRepository<Users, Long> {
}
src/main/java/com/example/users/service
ディレクトリに UsersService
クラスを作成します。
package com.example.user.service;
import java.util.List;
import java.util.Optional;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.example.user.entity.Users;
import com.example.user.repository.UsersRepository;
@Service
public class UsersService {
@Autowired
private UsersRepository usersRepository;
public List<Users> findAll() {
return usersRepository.findAll();
}
public Optional<Users> findById(Long id) {
return usersRepository.findById(id);
}
public Users save(Users user) {
return usersRepository.save(user);
}
public void deleteById(Long id) {
usersRepository.deleteById(id);
}
}
ポイント:@Service をつけると、Spring Boot がオブジェクトをサービスクラスとして管理してくれます。
@Service
public class UsersService {
ポイント:@Autowired で interface の依存関係を注入しています。
@Autowired
private UsersRepository usersRepository;
src/main/java/com/example/user/controller
ディレクトリに UsersController
クラスを作成します。
package com.example.user.controller;
import java.util.List;
import java.util.Optional;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.example.user.entity.Users;
import com.example.user.service.UsersService;
@RestController
@RequestMapping("/users")
public class UsersController {
@Autowired
private UsersService usersService;
@GetMapping
public List<Users> getAllUsers() {
return usersService.findAll();
}
@GetMapping("/{id}")
public ResponseEntity<Users> getUserById(@PathVariable Long id) {
Optional<Users> user = usersService.findById(id);
return user.map(ResponseEntity::ok).orElseGet(() -> ResponseEntity.notFound().build());
}
@PostMapping(consumes = {"application/json"})
public ResponseEntity<Users> createUser(@RequestBody Users user) {
Users savedUser = usersService.save(user);
return ResponseEntity.status(HttpStatus.CREATED).body(savedUser);
}
@PutMapping("/{id}")
public ResponseEntity<Users> updateUser(@PathVariable Long id, @RequestBody Users userDetails) {
Optional<Users> optionalUser = usersService.findById(id);
if (optionalUser.isPresent()) {
Users user = optionalUser.get();
user.setName(userDetails.getName());
user.setEmail(userDetails.getEmail());
Users updatedUser = usersService.save(user);
return ResponseEntity.ok(updatedUser);
} else {
return ResponseEntity.notFound().build();
}
}
@DeleteMapping("/{id}")
public ResponseEntity<Void> deleteUser(@PathVariable Long id) {
usersService.deleteById(id);
return ResponseEntity.noContent().build();
}
}
ポイント:@RestController をつけると、Spring Boot がオブジェクトをRestControllerクラスとして管理してくれます。
ポイント:@RequestMapping("/users") をつけると、http://localhost:8080/users のパスを定義したことになります。
@RestController
@RequestMapping("/users")
public class UsersController {
ポイント:@Autowired で Service Class の依存関係を注入しています。
@Autowired
private UsersService usersService;
ポイント:Optional
内の実際の Users
オブジェクトを取得するために get メソッドを利用しています。
Optional<Users> optionalUser = usersService.findById(id);
......
Users user = optionalUser.get();
src/main/java/com/example/user/UsersApplication.java
に以下のようなクラスを実装します。
IDEで UsersApplication
クラスを右クリックして「Run」を選択するか、ターミナルから以下のコマンドを実行します。
./gradlew bootRun
実行されたら http://localhost:8080/users にアクセスします。
レスポンスが返ってきたら成功です。