@PostMapping public ResponseEntity saveGame(@Validated @RequestBody GameDto.Request gameDto) { gameService.saveGame(gameDto); return ResponseEntity.status(HttpStatus.CREATED).build(); }위와같이 컨트롤러를 구현한 뒤 postman을 사용해 post request를 요청해 주었는데, 자꾸 데이터가 null로 나오는 문제가 발생했다. 도대체 왜이러나 하면서 빼먹은 부분이 있는지 생각해봤다. 이유는 바로 DTO에 setter가 없었던 것이였다. 데이터를 setter를 이용해 객체를 넣기 때문에 setter가 없으면 값을 할당하지 못해 null이 나오는 것으로 생각..
https://www.acmicpc.net/problem/2212 2212번: 센서 첫째 줄에 센서의 개수 N(1 ≤ N ≤ 10,000), 둘째 줄에 집중국의 개수 K(1 ≤ K ≤ 1000)가 주어진다. 셋째 줄에는 N개의 센서의 좌표가 한 개의 정수로 N개 주어진다. 각 좌표 사이에는 빈 칸이 하나 있 www.acmicpc.net 문제풀이 사고력이 필요한 문제다. 문제를 간단히 요약해보면, N개의 센서가 정수 좌표이 있으며 중복해 있을 수 있다. K개의 집중국이 있고 집중국은 아무데나 놔도 되고 모든 센서를 수신하면서 수신 가능영역이 최소인 위치에 놓아야 한다. 문제 접근은 이런 방식으로 해 보았다. 센서가 이리저리 놓여있을 텐데, 어느 지점 마다 끊어서 집중국을 설치해야 할까? 센서 사이의 거리가..
반복문을 사용하지 않고 removeIf 를사용하면 코드를 얼마나 줄일 수 있는지 알아보자. 리스트가 주어졌을 때 리스트의 원소를 삭제하기 위해 아래와 같은 방법으로 작성하는 경우가 많다. 아래 예시는 referenceCode의 맨 앞자리가 정수인 객체를 삭제한다. class Transaction { String referenceCode; public Transaction(String referenceCode) { this.referenceCode = referenceCode; } public String getReferenceCode() { return referenceCode; } @Override public String toString() { return referenceCode; } } 반복을 돌..
사용자에게 데이터를 받을 때 DTO의 필드에 ENUM이 존재하는 경우가 있다. ENUM을 이용해 동적쿼리를 작성하는 방법을 알아보자. 자동차를 갖고 있다면 자동차 종류를 ENUM으로 사용해 관련된 쿼리를 작성하고 싶을 수 있다. Mapper.java List selectCars(Car car); Car가 Enum이다. Car.java public enum Car { truck, racing, sport; } Mapper.xml ... ... ... ... 이런식으로 하면 된다. 쌍따옴표와 따옴표는 서로 위치가 바뀌어도 상관없다. name 대신 toString을 사용해도 된다. ENUM은 참고 https://stackoverflow.com/questions/12933813/using-enum-parame..
Mybatis를 사용하면서 Pageable을 사용할수는 없을지 알아보았다. 나도 찾아보기 전까지는 JPA에서만 사용할 수 있을줄 알았는데 그게 아니였다. Mybatis에서 Pageable을 사용하는 과정을 정리해 보았다. implementation 'org.springframework.data:spring-data-commons' JPA를 implementation 하지 않고 위 data commons를 이용하면 Pageable을 사용할 수 있다. 게시글 목록 조회에 Pageable을 적용해 보았다. Service public Page getBoards(Pageable pageable) { ... Page page = new PageImpl(ResponseDtoList, pageable, count); ..
mybatis를 사용하면서 검색을 구현하려다가 like쿼리에서 에러(Parameter index out of range)가 발생했다. 일반적으로 mybatis에서 인자로 받은 변수는 #{변수명}과 같이 사용한다. 이때 저 변수명은 "문자열"로 출력된다. 만약 문자열이 아니라 안의 글자 값 자체를 그대로 사용하고 싶다면 #대신 $를 사용하면 된다. LIKE "%#{param}%" // 오류 발생 LIKE "%${param}%" LIKE CONCAT('%',#{search},'%') ?(preparedStatement) 부분에 인자로 들어온 문자열이 들어간다. 문자열 안에 문자열을 넣어버려서 에러가 발생했다. 검색 그 자체가 바로 들어가는 것을 볼 수 있다. $를 사용할 경우 SQL Injection 공격을..