분류 전체보기 78

[Java] 문자열 비교 .equals 제대로 사용하기(feat.Null)

코드를 작성하다보면 문자열 비교 메서드 .equals 를 종종 사용하게 되는데 사용법은 다음과 같습니다. String zz = "AA"; zz.equals("AA") = true zz.equals("AB") = false 그런데 만약 체크하려는 변수(zz)에 Null이 있다면 어떻게 될까요?? NullPointerException이 발생할 것 입니다. String zz = null; zz.equals("AA") -> NullPointerException 그러면 앞에 Null에 대한 체크를 해야할까요?? 아닙니다. 순서를 바꿔주기만 해도 null-safe하게 처리할 수 있습니다. String zz = null; "AA".equals(zz) = false 요약 : NullPointerException을 피하..

Java 2023.02.22

[MySQL/JPA] LIMIT 구문을 사용 - 가장 최근/최신 데이터 가져오기(feat.Aurora)

가장 최근/최신 데이터를 "1건"을 가져오기 위해서는 여러 가지 방법이 있습니다. (DB마다 조금씩 다르니 확인하고 적용시키는 것을 추천드립니다.) 분석 함수 사용 - ROW_NUMBER(), RANK() 서브 쿼리 LIMIT 구문 사용 저는 3개 다 사용해봤지만 가장 편리하고 쉬운 LIMIT 구문을 사용해보겠습니다. 테이블에서 최신 데이터를 가져오려면 일단 날짜를 기준으로 뽑아야겠죠?? 저는 아래와 같이 작성했습니다. SELECT * FROM 테이블명 WHERE 조건 ORDER BY 생성날짜 DESC, "다른조건" DESC LIMIT 0, 1; LIMIT 사용법에는 2가지가 있는데요, 1. LIMIT x; - 조회된 결과(Result Grid)에서 x번째 row Data를 가져옵니다. 2. LIMIT ..

JPA & SQL 2023.02.08

[Java] String의 숫자 여부 판별하기(StringUtils, NumberUtils, Method)

Java에서 String이 숫자인지를 판별하기 위해 여러가지 편리한 유틸이 있습니다. 제가 시도하다가 성공한 것과 안된 것들 모두 알아보겠습니다. (2023.02.07 - gradle 기준 작성) 1. NumberUtils.isCreatable import org.apache.commons.lang3.math.NumberUtils; Boolean b = NumberUtils.isCreatable("123"); 2. Plain Java private boolean isNumeric(String strNum){ if(strNum == null){ return false; } try{ double d = Double.parseDouble(strNum); }catch (NumberFormatException n..

Java 2023.02.07

[Error/JPA&SQL] SQLException: Data truncated for column 에러 원인과 해결방법

다음과 같은 에러 메세지 발생! could not execute statement; nested exception is org.hibernate.exception.GenericJDBCException: could not execute statement could not execute statement java.sql.SQLException: Data truncated for column 'XXXX' at row 1" 에러 발생 원인 데이터 크기를 벗어났을 때 데이터 타입이 다를 때 저는 데이터 타입을 잘못 써서 위 에러가 발생해 수정 후 잘 되고있습니다.

Error 2023.02.01

[SpringBoot] LocalDateTime 받기(클라이언트Json→서버)

Postman - Json 작성 { "sendDate" : "2023-01-18T11:22:33" } 받을 DTO의 변수에 다음과 같이 셋팅하기 public class TransferInfoDto { //@JsonDeserialize(using = LocalDateDeserializer.class) //@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'hh:mm:ss", timezone = "Asia/Seoul") @DateTimeFormat(pattern = "yyyy-MM-dd'T'HH:mm:ss") private LocalDateTime sendDate; } (...주석은 많은 방법을 시도한 흔적...무시하세요!) @DateT..

[Error/MyBatis] BuilderException != \"\"

Mybatis mapper 작성 후 테스트하다가 다음과 같은 에러가 발생했습니다. org.apache.ibatis.builder.BuilderException: Error evaluating expression 'registrationId != null AND registrationId != \"\"'. 에러가 발생한 부분 원인 : AND를 '대문자'로 표기하여 에러 발생. 보통 저 에러는 따옴표를 잘못 넣어서 발생한다고 합니다. 따옴표가 제대로 표기되었다면 연산자를 확인해봐야하는데 연산자는 대문자가 아닌 '소문자'로 변경해주셔야합니다!! 수정 후 에러 해결!! 끝!!

Error 2023.01.16

[Swagger] DTO에서 parameter 숨기기

특정 DTO 필드 Parameter Swagger 문서상에서 Hidden 시키기 Request DTO에서 Parameter 하나를 추가해 쿼리를 돌리려하는데 몇가지 고민이 생겼습니다. 1. 요청받을 정보에는 필요없지만 쿼리문을 태울땐 필요한 파라미터가 하나 있다. 2. DTO에 넣자니 swagger에 보여서 싫고, 받은 DTO를 Map이나 또 다른 DTO를 만드는 것도 싫다. (Parameter 하나만 추가되기 때문) 3. 요약 : DTO에 parameter를 추가하되 swagger에 보이고 싶지 않다! 여러가지를 써본 결과 제일 간단한 방법을 찾아서 공유해봅니다. public static class UserDto { private String name; @ApiModelProperty(hidden = ..

[Java] Integer → int 캐스팅하기(Integer to int)

Json에서 나타낼 수 있는 숫자의 종류는 다음과 같습니다. 1. 정수(integer) 2. 실수(fraction) 3. 지수(exponent) 그 중 정수로 받는 경우를 알아보겠습니다. Json ex) { "age" : 20 } 위와 같은 Json을 받으면 데이터타입이 'Integer' 로 'int'의 래퍼클래스입니다. 이 Integer를 int로 캐스팅해보겠습니다. 방법 1. int test = (int)json.get("age"); 방법 2. Integer temp = (Integer) json.get("age"); int age = temp.intValue(); 참조타입에서 원시타입으로 캐스팅할 때는 '방법 1' 처럼 사용하시면 됩니다. 이유를 모르겠지만, 강제 캐스팅이 안먹힐 때가 있는데 그때는..

Java 2023.01.11

[Java] for문 vs 향상된(개선된) for문

코드를 작성하다가 스크롤 바에 노란색 줄과 경고창(?)이 떠서 뭐가 문제인지 살펴봤습니다. List testdtoList = abc(5); for(int i = 0; i < testdtoList.size(); i++){ int zz = testdtoList.get(i).getNumber(); } 엥? 뭐 추천도 아니고 왜 바꿀 수 있다고 뜨는거지...??? 뭐 일단 클릭 해볼까.... 클릭!! List testdtoList = abc(5); for(TestDTO testDto : testdtoList){ int zz = testdto.getNumber(); } 경고등은 사라졌지만 의문은 사라지지 않았습니다. 대체 뭐가 다르다고 기분 찝찝하게 노란색이 뜨고 그러지?? 성능이 엄청나게 차이나나?? - No!..

Java 2022.12.30