Programing/JAVA

mybatis 그리드 멀티 정렬 방법 order by many fields with dynamic query

리커니 2021. 10. 12.
반응형

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
          .
          .
          .
          .
          .
  )

 

반응형

댓글

💲 추천 글