Programing/JAVA
mybatis 그리드 멀티 정렬 방법 order by many fields with dynamic query
리커니
2021. 10. 12. 11:49
반응형
mybatis 그리드 멀티 정렬 방법 order by many fields with dynamic query
복수의 컬럼으로 ORDER BY 하는 방법을 알아보겠습니다.
ORACLE 기준입니다. 타 DB의 경우 알맞게 쿼리부분을 수정하세요.
우선 프론트에서는 배열로 정렬할 컬럼과 정렬 방식을 전달합니다.
[ajax parameter object structure]
sorting : [
{column : '정렬할 컬럼명1', order: "정렬방식"},
{column : '정렬할 컬럼명2', order: "정렬방식"}
]
예를들어 그리드의 헤더를 클릭하면 "", "desc", "asc" 순으로 값이 순환되게 됩니다.
정렬방식이 "" 라면 배열에서 제거 합니다. (splice)
쿼리에서는 if, foreach 태그를 활용하여 dynamic query 를 작성합니다.
<select id="sortingTest" parameterType="HashMap">
SELECT *
FROM (
SELECT ROW_NUMBER() OVER(
<if test="sorting.size!=0">
<foreach collection="sorting" item="item" open="ORDER BY" close="" separator=",">
T1.${item.column} ${item.order}
</foreach>
</if>
<if test="sorting.size==0">
ORDER BY T1.기본정렬컬럼 DESC
</if>
) AS RNUM
.
.
.
.
.
)
</select>
예를들어 아래와 같은 데이터가 전달 될 경우
sorting : [
{column : 'REG_DTM', order: "DESC"},
{column : 'ID', order: "ASC"}
]
실제 DB에는 아래와 같이 전달이 됩니다.
SELECT *
FROM (
SELECT ROW_NUMBER() OVER(T1.REG_DTM DESC, T1.ID ASC) AS RNUM
.
.
.
.
.
)
반응형