반응형 QueryDSL7 [QueryDSL] stringTemplate, dateTemplate로 날짜 포맷 하기, 날짜 더하기 날짜 형식 변경할 때 select문에서 DATE_FORMAT 함수를 사용하려면 Expressions.stringTemplate("DATE_FORMAT( {0}, {1} )", 변경할 값, 변경할 날짜 형식) 예) createdAt 컬럼의 데이터를 "%Y-%m-%d %H:%i:%s" 형식으로 변경 fun date(cardNumber: String): String? { return queryFactory.select( Expressions.stringTemplate( "DATE_FORMAT( {0}, {1} )", createdAt, ConstantImpl.create("%Y-%m-%d %H:%i:%s") ).coalesce("") ).from(member).orderBy(member.id.desc()).f.. 2023. 7. 17. [Querydsl] 멀티 DB(Multi DB) 설정 하기, DB 2개 이상 연결 1. application.yml 에 Datasource 추가 spring: datasource: driverClassName: org.mariadb.jdbc.Driver url: jdbc:mariadb://localhost:3306/{DB명} username: {DB user} password: {DB password} second-datasource: driverClassName: org.mariadb.jdbc.Driver url: jdbc:mariadb://localhost:3306/{DB명} username: {DB user} password: {DB password} 2. DataSource Configuration 1) 첫 번째 DB 설정 @Configuration @EnableTransact.. 2023. 7. 17. QueryDSL select절에 subQuery 조회 join 하고 중복된 데이터를 제거하기 위해 select절에 서브 쿼리를 작성한다 fun findWithdrawMember(): List { return queryFactory.select( QWithdrawMemberList( member.id, JPAExpressions.select(memberToken.ipAddress).from(memberToken).where(memberToken.id.eq(member.id)).orderBy( memberToken.id.desc()).limit(1), member.createdAt.stringValue(), member.updatedAt.stringValue() ) ).distinct().from(member).leftJoin(memberToken).disti.. 2022. 12. 13. [QueryDSL] 동적 쿼리 작성하기/BooleanBuilder, BooleanExpression 조건에 따라 쿼리문을 다르게 작성하고 싶을 때 쓰는 방법 - BooleanBuilder fun findDynamicQuery(name: String?, age: String?, phoneNumber: String?):List{ val builder = BooleanBuilder() if (!StringUtils.isNullOrEmpty(name)) builder.and(member.name.eq(name)) if (!StringUtils.isNullOrEmpty(age)) builder.and(member.age.eq(age)) if (!StringUtils.isNullOrEmpty(phoneNumber)) builder.and(member.phoneNumber.eq(phoneNumber)) return.. 2022. 12. 7. QueryDSL 결과 값이 Null인 경우 다른 값으로 할당 조회한 데이터의 값이 null 일 때 coalesce("대체할 값")을 사용하여 에러를 해결한다 queryFactory.select(member.name.coalesce("")) .from(members) .orderBy(member.id.desc()) .fetch() member 엔티티의 name 값이 null이 있으면 "" 빈 문자열로 출력 2022. 10. 28. QueryDSL like 와 contains like 구문을 사용할 때는 완전히 일치하는 경우만 사용 - WHERE name LIKE 'search_query' query.where(qMember.member.name.like(search_query)); search_query에 앞 뒤로 %를 붙여서 사용 가능 contains는 완전히 일치하지 않아도 조회 가능 - WHERE name LIKE '%search_query%' query.where(qMember.member.name.contains(search_query)); 2022. 9. 2. [Querydsl] @QueryProjection 사용하기, DTO로 조회 selectFrom을 사용하여 테이블의 전체 열을 조회하지 않고 원하는 열만 조회할 때 DTO를 사용하여 조회하고 출력할 수 있다 테이블의 id, name, data만 조회 하기 위해서는 queryDto이름의 data class를 정의하고 @QueryProjection을 붙여줘야 한다 data class DataQueryDto @QueryProjection constructor( val id: Long, val name: String, val data: String ) 이렇게 정의하면 DTO기반으로 생성된 QDTO를 사용할 수 있다 @QueryProjection을 사용하면 컴파일 시에 타입을 체크할 수 있다 fun findByName(): List{ return query.select(QDataQuery.. 2022. 8. 17. 이전 1 다음 반응형