개발노트/jqGrid

[jqGrid] jqGrid + MyBatis로 오름차/내림차 동적 정렬 구현하기

dev-mylee 2025. 1. 20. 16:11

오늘 헷갈린 내용 정리 노트

 

## 기본 구조

 

### MyBatis Mapper

- 동적 정렬을 위해 `<choose>` 태그 활용 - 기본적으로 `REG_DT` 내림차순 정렬

<choose>
    <when test="sortColumn != null and sortColumn != ''">
        ORDER BY
        <choose>
            <when test="sortColumn == 'count'">BOARD_COUNT</when>
            <when test="sortColumn == 'title'">BOARD_TITLE</when>
            <when test="sortColumn == 'writer'">USER_NM</when>
            <when test="sortColumn == 'date'">REG_DT</when>
            <otherwise>REG_DT</otherwise>
        </choose>
        <choose>
            <when test="sortOrder.equalsIgnoreCase('desc')">DESC</when>
            <otherwise>ASC</otherwise>
        </choose>
    </when>
    <otherwise>
        ORDER BY REG_DT DESC
    </otherwise>
</choose>

 

 

### jqGrid

  • beforeRequest 이벤트 핸들러로 정렬 파라미터 추가
$("#boardTable").jqGrid({
    beforeRequest: function() {
        var grid = $(this);
        var sortColumnName = grid.jqGrid('getGridParam', 'sortname');
        var sortOrder = grid.jqGrid('getGridParam', 'sortorder');

        grid.jqGrid('setGridParam', {
            postData: {
                sortColumn: sortColumnName,
                sortOrder: sortOrder
            }
        });
    }
});

 

 

### 주의할 점

VO 설정

  • sortColumn, sortOrder 필드 추가
  • Getter, Setter 필수

서비스 로직

  • 정렬 컬럼 기본값 처리
  • 허용되지 않은 컬럼 정렬 방지

 

헷갈 포인트

  1. 정렬 컬럼명 매핑
    • MyBatis의 <choose> 태그로 컬럼명 변환
    • 프론트 컬럼명과 DB 컬럼명 일치시키기
  2. 기본 정렬 설정
    • 정렬 파라미터 없을 때 기본값 지정 중요
    • 대부분 최신순(날짜 내림차순)으로 처리