table
create table fruit
(
id bigint auto_increment,
name varchar(20),
warehousingDate date,
price long,
soleOutYN char(1) DEFAULT 'N',
primary key (id)
);
controller
@PostMapping("/api/v1/fruit")
public void saveFruit(@RequestBody FruitSaveRequestDTO request){
String sql = "INSERT INTO fruit (name, warehousingDate, price) VALUES (?, ?, ?)";
jdbcTemplate.update(sql, request.getName(), request.getWarehousingDate(), request.getPrice());
}
dto
private String name;
private LocalDate warehousingDate;
private long price;

+) int와 long의 차이
1. 크기
int: 32비트. -2,147,483,648 ~ 2,147,483,647까지
long: 64비트. -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807까지long은 int보다 더 넓은 범위의 정수 값을 저장할 수 있어서 큰 값이나 더 큰 정밀도가 필요한 경우 long을 사용한다. 예로 시간 또는 날짜를 표현하는 데 int는 충분하지 않을 수 있다.
2. 표현법
int number = 10;
long bigNumber = 10000000000L;
long은 숫자 뒤에 'L' 또는 'l'을 붙인다.
controller
@PutMapping("/api/v1/fruit")
public void updateFruit(@RequestBody FruitUpdateRequestDTO request) {
String readSql = "SELECT * FROM fruit WHERE id = ?";
boolean isFruitNotExist = jdbcTemplate.query(readSql, (rs, rowNum) -> 0, request.getId()).isEmpty();
if(isFruitNotExist) {
throw new IllegalArgumentException();
}
String sql = "UPDATE fruit SET soleOutYN = 'Y' WHERE id = ?";
jdbcTemplate.update(sql, request.getId());
}
dto
private long id;
parameter
"id" : "1"

사과 팔렸어요~

5번 과일은 없어요~
controller
@GetMapping("/api/v1/fruit/stat")
public FruitStatResponseDTO salesStat(@RequestParam String name){
String readSql = "SELECT * FROM fruit WHERE name = ?";
boolean isFruitNotExist = jdbcTemplate.query(readSql, (rs, rowNum) -> 0, name).isEmpty();
if(isFruitNotExist) {
throw new IllegalArgumentException();
}
String salesAmountSql = "SELECT SUM(price) FROM fruit WHERE name = ? AND soleOutYN = 'Y'";
String notSalesAmountSql = "SELECT SUM(price) FROM fruit WHERE name = ? AND soleOutYN = 'N'";
long salesAmount = jdbcTemplate.queryForObject(salesAmountSql, long.class, name);
long notSalesAmount = jdbcTemplate.queryForObject(notSalesAmountSql, long.class, name);
return new FruitStatResponseDTO(salesAmount, notSalesAmount);
}
dto
request
private String name;
response
private long salesAmount;
private long notSalesAmount;
과일 목록

결과
