@RestController
public class FruitController {
private final JdbcTemplate jdbcTemplate;
public FruitController(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
@PostMapping("/api/v1/fruit")
public void saveFruit(@RequestBody FruitCreateRequest request) {
String sql = "INSERT INTO fruit (name, price, stocked_date) VALUES (?, ?, ?)";
jdbcTemplate.update(sql, request.getName(), request.getPrice(), request.getWarehousingDate());
}
}
package com.group.libraryapp.dto.fruit.request;
import java.time.LocalDate;
public class FruitCreateRequest {
private String name;
private LocalDate warehousingDate;
private Long price;
public String getName() {
return name;
}
public LocalDate getWarehousingDate() {
return warehousingDate;
}
public Long getPrice() {
return price;
}
}
200 OK가 나온 것을 확인 가능하다.
@PutMapping("/api/v1/fruit")
public void updateFruit(@RequestBody FruitUpdateRequest request) {
//예외처리
String readSql = "SELECT * FROM fruit WHERE id = ?";
boolean isUserNotExist = jdbcTemplate.query(readSql, (rs, rowNum) -> 0, request.getId()).isEmpty();
if (isUserNotExist) {
throw new IllegalArgumentException();
}
String sql = "UPDATE fruit SET is_sold = 1 WHERE id = ?";
jdbcTemplate.update(sql, request.getId());
}
package com.group.libraryapp.dto.fruit.request;
public class FruitUpdateRequest {
private long id;
public long getId() {
return id;
}
}
200 OK가 나온 것을 확인 가능하다.
@GetMapping("/api/v1/fruit/stat")
public FruitStatResponse fruitSoldStatus (@RequestParam String name) {
String readSql = "SELECT * FROM fruit WHERE name = ?";
boolean isUserNotExist = jdbcTemplate.query(readSql, (rs, rowNum) -> 0, name).isEmpty();
if (isUserNotExist) {
throw new IllegalArgumentException("");
}
String salesSql = "SELECT sum(price) FROM fruit WHERE is_sold = 1";
String notSalesSql = "SELECT sum(price) FROM fruit WHERE is_sold = 0";
Long salesAmount = jdbcTemplate.queryForObject(salesSql, Long.class);
Long notSalesAmount = jdbcTemplate.queryForObject(notSalesSql, Long.class);
return new FruitStatResponse(salesAmount, notSalesAmount);
}
queryForObject 메소드에 대한 건 처음 알았다...
단건의 조회할 때 쓴다고 한다!!
queryForObject에서 두번째 매개변수는 결과 값을 어떤 클래스 형식으로 가져올지를 나타낸다.
따라서 Long.class를 사용하는 것은 queryForObject 메소드가 결과를 long 객체로 변환하여 반환할 것을 나타낸다!
package com.group.libraryapp.dto.fruit.response;
public class FruitStatResponse {
private long salesAmount;
private long notSalesAmount;
public FruitStatResponse(long salesAmount, long notSalesAmount) {
this.salesAmount = salesAmount;
this.notSalesAmount = notSalesAmount;
}
public long getSalesAmount() {
return salesAmount;
}
public long getNotSalesAmount() {
return notSalesAmount;
}
}