본문 바로가기

전체 글73

[Java] WebClient queryParam uri 인코딩 문제 WebClient를 사용하여 Get Method를 요청할때 사용하는 QueryParam에 인코딩 문제 다음과 같은 데이터 포맷이 있을때 private static final DateTimeFormatter OUTPUT_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSXXX"); public static RequsetDto of(String start) { // start = 2024-10-15 RequsetDto dto = new RequsetDto(); // Parse start and end dates LocalDate startDate = LocalDate.parse(s.. 2024. 10. 17.
[DB] EntityManager Multirow Insert EntityManager를 통해서 Multirow Insert를 사용하는 두 가지 방법입니다.JPA에 다음과 같은 ID 전략을 사용할때 사용하기 좋습니다. @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer id; IDENTITY 전략을 사용하면, 배치인서트가 원하는대로 동작하지 않을 가능성이 큽니다.또한 Auditing이나 외래키 등 생각하지 못한 에러가 발생하는 경우도 많습니다.그래서 EntityManager를 통해 마이그레이션 한 경험을 정리합니다. 1. NativeQuery 사용하기쿼리로만 작성하게 되면, 빈값에 대한 NULL처리를 신경써줘야 합니다.또한 '이나 "같은 문자에 들어가는 특수문자도 신경써서 .. 2024. 7. 30.
[DB] WITH AS 구문 사용하기 WITH AS 구문WITH 구문은 공통 테이블 식(Common Table Expression, CTE) 을 정의하는 데 사용된다.이는 임시적인 결과 집합을 정의하고, 이를 쿼리의 다른 부분에서 참조할 수 있게 해준다.WITH는 뷰(View)와 유사하지만, CTE는 임시적이며 쿼리 내에서만 사용가능하다.뷰와 달리 생성해주고 삭제해주지 않아도 된다.  단일 사용하기예를 들어, 다음과 같이 서브쿼리 결과를 WHERE 안에 사용하고 싶을때 사용한다.SELECT * FROM ITEM WHERE ID IN (SELECT ITEM_ID FROM ORDER ORDER BY CREATED_AT DESC LIMIT 200); 해당 쿼리는 서브쿼리에 limit 200이 들어가기 때문에 실행되지 않는다.그렇다고 ITEM을 C.. 2024. 7. 25.
[QueryDSL] Pageable 정렬하기 QueryDsl과 Pageable을 이용한 Sort 기능 사용법 QueryDsl에서는 Client가 제공해준 Order를 사용하는 방법이 여러가지가 있다. 그 중 다음과 같은 코드를 사용하면 복잡한 분석기능을 사용하지않고, 클라이언트가 pageable에 제공하는 sort 정보를 모두 한 코드로 사용할 수 있다. for (Sort.Order order : pageable.getSort()) { PathBuilder path = new PathBuilder(Object.class, order.getProperty()); query.where(builder).orderBy(new OrderSpecifier(com.querydsl.core.types.Order.valueOf(order.getDirection().. 2024. 2. 14.
[Java] Java에서 List를 Array로 변경하기 Java에서 List를 Array로 변경하는 과정에서 배운 것을 기록합니다. https://www.baeldung.com/java-collection-toarray-methods 를 참고해서 작성했습니다. List 인터페이스의 toArray() Java에서는 List 인터페이스의 경우아래와 같은 toArray() 메서드를 지원합니다. Object[] toArray(); T[] toArray(T[] a); toArray() method 사용법 toArray()의 경우 List의 사이즈를 기반으로 자동으로 배열 사이즈를 만들어줍니다. 결과는 Object[]로 반환되며, 단순하게 타입 캐스팅을 할 수 없습니다. 만약 다음과 같이 코드를 작성하면 java.lang.ClassCastException가 발생합니다... 2023. 12. 20.
[Java] @Inherited 어노테이션 @Inherited 어노테이션이란? 설명 Java에서 사용하는 meta annotatino입니다. meta annotation은 다른 annotation을 위한 annotation을 말합니다. 목적 특정 annotation을 상속 가능(inheritable) 하도록 만들 때 사용합니다. 사용 방식 특정 annotation에 @Inherited를 추가합니다. 제한사항 클래스 수준의 annotation에만 적용 가능합니다. 메소드나 필드 수준의 annotation에는 적용되지 않습니다. 인터페이스에 사용해도 구현체에는 상속되지 않습니다. 테스트를 해보면 다음과 같다. @Inherited 예시 코드 MyInheritedAnnotation이란 커스텀 어노테이션을 만들고, @Inherited를 추가합니다. 그리고.. 2023. 12. 8.