반응형 [개발] 프레임워크49 [QueryDSL] IN 절에 Expressions.template을 이용해서 데이터 넣기 QueryDSL를 이용하여 Where 절 안에 IN 절을 사용해야 할 때가 있습니다. 단일 컬럼의 경우 QClass의 컬럼을 선택하고 .in() 메서드를 체이닝해서 처리를 하면 됩니다. 여러 개의 컬럼을 이용해야 할 경우 Expressions.list() 를 사용해서 컬럼 목록을 파라미터로 입력하고 .in() 메서드를 호출하면 됩니다. 이 때 in 메서드 안에 입력되는 값들은 다음과 같습니다. public BooleanExpression in(Collection right)public BooleanExpression in(T... right)public BooleanExpression in(CollectionExpression right)public BooleanExpression in(SubQuery.. 2024. 12. 31. [QueryDSL] LocalDateTime, LocalDate 파라미터 바인딩 시 'MM/dd/yyyy HH:mm:ss' 로 표시될 때 해결 방법 트러블 슈팅MyBatis 코드를 JPA + QueryDSL로 이관하는 작업을 하고 있습니다. MySQL 컬럼 중 date, datetime을 LocalDate, LocalDateTime으로 매핑하고 개발을 진행하던 중 QueryDSL에서 where(), set() 등에서 LocalDate, LocalDateTime 객체를 파라미터로 넣어서 처리를 하고 있습니다. 문제는 하이버네이트의 바인딩 쿼리를 봤을 때 날짜 형식 문자열이 'MM/dd/yyyy HH:mm:ss'로 표시가 되는 것을 확인했습니다. 이 문자열 형식은 timestamp 컬럼의 경우 정상적으로 동작을 하지만, date, datetime의 경우 처리가 되지 않는 문제가 있습니다. 원하는 형식 문자열은 'yyyy-MM-dd HH:mm:ss' 입니.. 2024. 12. 14. [JdbcTemplate] batchUpdate 를 통해 bulk insert를 하는 방법 @GeneratedValue(strategy = GenerationType.IDENTITY) 으로 선언된 PK가 있다면 JPA에서는 Bulk Insert를 지원하지 않습니다. QueryDSL-JPA도 마찬가지인데요. 이럴 경우 MyBatis나 JdbcTemplate을 사용해야 하는데 둘 다 타입 안정성이 떨어지지만 JdbcTemplate이 컴파일 타임 시 타입 안정성을 더 높일 수 있다고 판단하여 JdbcTemplate으로 Bulk Insert를 구현하게 됐습니다. JPA에서 Bulk Insert를 지원하지 않는 이유@GenerationValue(strategy = GenerationType.IDENTITY)로 @Id 컬럼을 선언하고 batch insert는 할 수 없습니다. 공식 문서에는 다음과 같.. 2024. 12. 7. [QueryDSL] projection으로 테이블 조인 결과 데이터 매핑하기 MyBatis 코드를 QueryDSL로 이관하는 작업 중에 여러 개의 테이블의 조인되어 있는 결과를 반환하는 매핑 클래스를 만들어야 했습니다. QueryDSL의 경우 projection이라고 해서 SELECT 절의 조회 대상을 지정하는 방법이 있었습니다. projection 용 record 타입의 dto를 하나 만들어 결과를 매핑하여 처리를 하였는데요. 그 코드를 한 번 소개하려고 합니다. ProjectionProjection은 프로그래밍 및 데이터베이스 분야에서 전체 데이터 중 일부만 선택해 가져오는 작업을 말합니다. 주로 QueryDSL, JPA, SQL 등에서 사용되며, 필요한 데이터만 선택적으로 추출하여 효율적인 데이터 전송 및 처리를 가능하게 합니다. Projection 사용 시 주의 사항 .. 2024. 12. 3. 이전 1 2 3 4 ··· 13 다음 반응형