대머리개발자

R2DBC Native 쿼리에 날짜 컬럼 바인딩. 본문

개발이야기/DataBase

R2DBC Native 쿼리에 날짜 컬럼 바인딩.

대머리개발자 2024. 5. 8. 15:39
728x90

R2DBC는 여전히

너무 단순한 형태의 API만 제공하기 때문에  페이징 처리를 위해서는

네이티브로 작성해야 한다.

    @Query( """
            SELECT id, action, amount, regDt
            FROM Product
            WHERE userId =:userId
            ORDER BY regDt ASC
            LIMIT :pageIndex, :pageSize
        """
    )
    fun searchPointByUserId(userId: String, pageIndex: Int, pageSize: Int) : Flux<ProductListDto>

 

⭐⭐ 객체를 인자로 받아서 깔끔하게 바인딩 해볼라고 했더니...역시나. ㅋ

 

뭐 일단 낱개로 넘겨서 진행했는데..

날짜 바인딩을 제대로 안 된다.

 

 

1. DTO 클래스의 날짜 변수를 String 으로 변경해보고 

data class ProductListDto(
    var id: Long=0,
    var action:  Action=Action.SPEND,
    var amount: Int=1,
    var regDt: String = ""  // LocalDateTime 도 안 된다.
)

 

2. 쿼리에서도 DATE_FORMAT을 이용해서 문자열로 변경해보고

    @Query( """
            SELECT id, action, amount, DATE_FORMAT(regDt, '%Y-%m-%d %H:%i:%s') as regDt
            FROM Product
            ...

 

안 된다.ㅋ

 

물론 단순 엔티티(entity)로 다 받으면 되나 깔끔하게 필요한 값만 취하기 위함이다!

주고 받는 데이터가 경량화 되면 모든것이 베스트!!닷

 

 

1. 더 쾌적한 환경(속도)을 제공

2. 모든것이 경비가되는 클라우드 세상에서..돈을 절약s?  회사 돈은 나만 생각한다 ㅋ

 

바인딩이 안 되는 설계는 사실상 오류 인듯 한데 이것을 try 한 부분은 이해가 할 수 없었다. 

오류가 발생하고 해당 오류 메세지를 통해서 접근했다면 좀 더 수월하게 이슈를 잡지 않았을까 한다. ㅎ

 

답은 일단 인터페이스로 DTO를 만들어야 한다. 

interface ProductListDto{
    fun getId():Long
    fun getAction():String
    fun getAmount():Int
    fun getRegDt():LocalDateTime
}

 

안 될라면 다 안되지...LocalDateTime만 안 되서 반나절 슝슝!

 

 

 

해당 인터페이스 그대로 SAVE할 때 이용하고자 했는데 바인딩 실패가 발생한다.

failed to parse a JSON document: com.fasterxml.jackson.databind.exc.InvalidDefinitionExceptio

DB 조회 결과를 바인딩 할때만 사용 가능한듯하다.

 

 

 

Form에서의 바인딩은 DTO를 사용해야 한다... 결국 두 개의 구조체를 이중으로..관리....캬..떱.

 

리스트용 객체를 하나 더 만든것이 여간 찝찝할 수 없다. ㅠ

 

 

5월 22일 추가..

    @Column("regDt")
    var regDt: LocalDateTime? = null,

 

어노테이션(@) 으로 바인딩되는 컬럼명을 명시 해줘도 된다! 오케바뤼

실상 인터페이스로 한 경우도 명시를 해줬기 때문에 된 부분인 것이다..아하!!

 

 

728x90

'개발이야기 > DataBase' 카테고리의 다른 글

R2DBC 객체 등록/수정 고민  (0) 2024.05.29
R2DBC 한 방 쿼리 고민s -> 안 된다!  (0) 2024.05.21
게시판 본문 컬럼 분리에 대한 고민  (0) 2024.03.11
json vs 확장속성  (0) 2024.03.08
DB 꽃은 튜닝이지!  (0) 2024.03.07