문제 상황Querydsl을 통해 MySQL에 날짜 함수를 적용하려고 하는데 이슈가 있었다.날짜 함수를 적용하기 위해서는 Expressions.stringTemplate 을 이용하면 원하는 mysql 함수를 적용시킬 수 있다고 생각했다.날짜 연산이 들어간 조건문을 만들어 디버깅을 하는데 해당 조건을 인식할 수 없다고 에러가 발생했다. reasonHibernate에서 아직 INTERVAl 예약어를 지원하지 않는다. QueryDsl 코드는 컴파일 이후 Hibernate로 변경되어 실행되므로, Hibernate에서 지원하지 않는 예약어는 사용할 수 없다!! (Querydsl은 HQL(Hibernate Query Language) 쿼리를 Type-Safe 하게 유지보수해야 할 필요로 탄생했다.) Querydsl ..
OptionalOptional은 값이 있을 수도 있고 없을 수도 있는 상황을 처리할 때 사용합니다.이를 통해 null을 직접 다루지 않고, 값의 유무를 명시적으로 처리할 수 있습니다.NullPointerException을 방지하면서 코드 가독성을 높일 수 있다. Map()Optional.map() 은 값이 있으면 해당 값을 꺼내와서 코드 블럭을 실행합니다.map() 함수는 간단히 A type을 B type으로 변경하는 역할을 합니다.Optional을 사용하면서 메서드 체이닝을 사용해 처리할 수 있습니다.public String getTeamNameFromDevice(Optional optDevice){ return optDevice .map(Device::getOwner) .map(Use..
Map - Grouping 데이터 삽입 순서대로 안 돼요..HashMap을 이용해서 Grouping 하여 데이터가 삽입된 순서대로 반환하려고 했는데, 데이터의 순서가 변경되어 반환되는 문제가 있었습니다.해당 문제는 HashMap으로 Map 객체를 만들어 데이터의 삽입 순서가 보장되지 못한 문제였습니다.Map> groupedCategory = Categories.stream() .collect(Collectors.groupingBy(Category -> Category.type().get(locale))); 위 코드에서 데이터를 순서대로 그룹핑하기 위해 기본적으로 적용되는 Map 구현체가 아닌 LinkedHashMap을 사용하여 입력된 순서가 유지되도록 해야 합니다.Map> groupedC..
Sort란Sort 클래스는 스프링에서 정렬을 위한 정보를 담고 있습니다.Sort.Order 객체는 정렬 방향과 정렬할 타겟에 대한 정보를 가지고 있습니다.Order 클래스는 Sort 클래스 내부에 있는 내부 클래스입니다. Sort 객체 생성Sort 클래스를 여러 정렬 조건을 정의할 수 있습니다.Sort.by()를 통해 정렬 방향과 속성을 정의합니다.Sort sort = Sort.by(Sort.Order.asc("name"), Sort.Order.desc("age"));Order 클래스property : 정렬할 필드 이름direction : 정렬 방향 Sort.Order 접근Sort 객체 내의 정렬 조건과 정렬 대상 속성을 확인하기 위해서는 Sort 객체를 Stream으로 순회하거나 forEach를 사용해..