Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
Tags
- 티스토리챌린지
- jsonMarshaller
- formik
- RedirectService
- OIDC
- pinpoint
- 7879
- UnsupportedOperationException
- 오블완
- 노드간 통신
- reids
- nGinder
- hbase 저장공간 설정
- pinpoint 2.5.3
- 개발 어렵당.ㅠ
- Ingress Controller Fake
- Armeria
- jar 배포
- R2DBC Paging
- 월급루팡 일지
- Loki 로그
- ㅉ때
- 애자일 싫타
- 핀포인트
- fake jwt
- 플루터
- LPOS
- intellij
- 논블록킹 성능
- save/update
Archives
- Today
- Total
대머리개발자
마이그레이션(MyBatis -> R2DBC) 언제나 즐겁네! 본문
728x90
MyBatis --> R2DBC로 마이그레이션 하고 있는데.. 빡치게 재미지네!
제일 험난했던 놈이다.
## 쿼리 바인딩
<resultMap id="status" type="StatusDto">
<id property="code" column="signal_code"/>
<result property="category" column="category"/>
<result property="name" column="name"/>
<result property="price" column="price"/>
<result property="digital" column="digital"/>
<result property="consecutiveMovement" column="consecutive_movement"/>
</resultMap>
<resultMap id="summary" extends="status" type="SummaryDto">
<collection property="histories" javaType="ArrayList" ofType="domain.jdbc.SummaryDto$ScoreTimeSeries">
<id property="date" column="date"/>
<result property="score" column="score"/>
</collection>
</resultMap>
## 데이터 클래스
abstract class StatusDto (
val category: Int = 10,
val code: String = "",
val name: String = "",
val price: BigDecimal = BigDecimal.ZERO,
val digital: Int = 1,
val movement: Int = 0
)
data class ScoreTimeSeries(
val date:LocalDate,
val score:BigDecimal
)
data class SummaryDto(
val histories :List<ScoreTimeSeries>
) : StatusDto()
R2DBC는 한번에 바인딩이 되지 읺기 때문에 비지니스 로직에서 처리해야 한다.
return gaugeRepository.searchMainSignals()
.groupBy { it.code }
.flatMap { groupedFlux ->
val cachedGroupedFlux = groupedFlux.cache()
cachedGroupedFlux.map {ScoreTimeSeries(it.date, it.score)}
.collectList()
.zipWith(cachedGroupedFlux.next())
.map{ SignalOverview.from(it.t2, it.t1)}
}.collectList()
groupBy를 이용하는 것이다. data와 socre를 발라내고, 그룹된 공통 데이터를 next()로 발라내서 하나의 객체로 바인딩한다!. 여기서 cache를 안 쓰면 두번 구독한다고 오류가 발생한다..
하악하악.!
728x90
'개발이야기 > DataBase' 카테고리의 다른 글
모든 쿼리는 index를 타야 제맛이쥐 (0) | 2024.09.04 |
---|---|
CROSS JOIN 언제 쓸까 했는데.. (1) | 2024.07.09 |
group_concat 속 문자 정렬하기 (0) | 2024.05.31 |
R2DBC 객체 등록/수정 고민 (0) | 2024.05.29 |
R2DBC 한 방 쿼리 고민s -> 안 된다! (0) | 2024.05.21 |