SELECT count(*) FROM A
* JOIN B ON A.id = B.id
* JOIN C ON A.id = C.id
* WHERE u.grade="정회원" and g.sido = "서울시" and g.sigungu ="서구" and g.dong = "얌얌동"
* and DATE_FORMAT(ud.created_at, "%Y-%m-%d") = CURDATE() and ud.deleted_at = NULL;
- 위의 SQL문을 queryDSL로 변경하려고 하다가, DATE_FORMAT 쪽에서 막혔다.
- DATE_FORMAT을 queryDSL 로 어떻게 바꿀 수 있을지 찾아보다가 김영한님 글 을 보게됐다.
-> SQL의 복잡도를 줄이고 애플리케이션 코드를 적극적으로 활용하는 게 중요하다.
SQL로 날짜 형식 받아서 변형하려고 하지말고, 애플리케이션단에서 변수설정해서 between 으로 설정해라~
kotlin
var now = LocalDateTime.now()
var today = LocalDateTime.of(now.year, now.month, now.dayOfMonth, 0 , 0 , 0)
queryDSL
return from(user)
.where(A.grade.eq("정회원")
.and(A.B.sido.eq(sido))
.and(A.B.sigungu.eq(sigungu))
.and(A.B.dong.eq(dong))
.and(A.C.createdAt.after(today))
.and(A.deleted.eq(false))
).
fetch()