

原
2024.08.05
30
こんにちは!原です!
前回作成した 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 にアクセスします。

レスポンスが返ってきたら成功です。