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

 

반응형