우리는 JPA라는 개념을 배우고 유저 테이블에 JPA를 적용해 보았습니다. 몇 가지 문제를 통해 JPA를 연습해 봅시다! 🔥
과제 #6에서 만들었던 Fruit 기능들을 JPA를 이용하도록 변경해보세요!
Fruit.java
@Entity
public class Fruit {
@Getter
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
@Getter
@Column(nullable = false)
private String name;
@Getter
@Column(name = "warehousing_date", nullable = false)
private LocalDate warehousingDate;
@Getter
@Column(nullable = false)
private long price;
@Column(nullable = false)
private boolean isSold;
public Fruit() {
}
public Fruit(String name, LocalDate warehousingDate, long price) {
this.name = name;
this.warehousingDate = warehousingDate;
this.price = price;
}
public Fruit(String name, LocalDate warehousingDate, long price, boolean isSold) {
this.name = name;
this.warehousingDate = warehousingDate;
this.price = price;
this.isSold = isSold;
}
public Fruit(long id, String name, LocalDate warehousingDate, long price, boolean isSold) {
this.id = id;
this.name = name;
this.warehousingDate = warehousingDate;
this.price = price;
this.isSold = isSold;
}
public boolean isSold() {
return isSold;
}
public void updateFruitInfo() {
this.isSold = true;
}
}
application.yml
jpa:
hibernate:
ddl-auto: none
properties:
hibernate:
show_sql: true
format_sql: true
dialect: org.hibernate.dialect.MySQL8Dialect
FruitService.java
@Service
public class FruitService {
private final FruitRepository fruitRepository;
public FruitService(FruitRepository fruitRepository) {
this.fruitRepository = fruitRepository;
}
public void saveFruitInfo(SaveFruitInfoRequest request) {
fruitRepository.save(new Fruit(request.getName(), request.getWarehousingDate(), request.getPrice()));
}
public void updateFruitInfo(UpdateFruitInfoRequest request) {
Fruit fruit = fruitRepository.findById(request.getId()).orElseThrow(IllegalArgumentException::new);
fruit.updateFruitInfo();
fruitRepository.save(fruit);
}
public GetFruitInfoResponse getFruitSalesAmountInfo(String name) {
long salesAmount = fruitRepository.salesAmount(name);
long notSalesAmount = fruitRepository.notSalesAmount(name);
return new GetFruitInfoResponse(salesAmount, notSalesAmount);
}
}
FruitController.java
@RestController
@RequestMapping("/api/v1/fruit")
public class FruitController {
private final FruitService fruitService;
public FruitController(FruitService fruitService) {
this.fruitService = fruitService;
}
@PostMapping
public void saveFruitInfo(@RequestBody SaveFruitInfoRequest request) {
fruitService.saveFruitInfo(request);
}
@PutMapping
public void updateFruitInfo(@RequestBody UpdateFruitInfoRequest request) {
fruitService.updateFruitInfo(request);
}
@GetMapping("/stat")
public GetFruitInfoResponse getFruitInfo(@RequestParam String name) {
return fruitService.getFruitSalesAmountInfo(name);
}
}
우리는 특정 과일을 기준으로 지금까지 우리 가게를 거쳐갔던 과일 개수를 세고 싶습니다. <문제 1>에서 만들었던 과일 Entity Class를 이용해 기능을 만들어 보세요!
예를 들어