게시판을 출력해주는 SQL문이 있다.
통상적으로 아이바티스의 경우
<select id="DAO.selectList" parameterClass="VO" resultClass="Map">
이런 식으로 해당 쿼리문을 실행할 id와, input, output으로 수행한다.
기본적으로 게시판 selectAll 문에는 serach 즉 검색이 포함되어 있는 경우가 많다.
내가 이 서브쿼리를 사용하게 된 이유는 , 1순위로 공지사항이 최상단에 출력되고,
그 후에 출력 되는 것들은 PK에 의해 출력 되고, 그 후 페이징처리를 위해 cnt값을 넘겨주어야 했다.
먼저 serach를 통해 select 될 아이바티스 sql문을 작성한다.
<sql id="searchList">
/* DAO.selectList */
SELECT A.컬럼1
, A.컬럼2
, A.컬럼3
FROM 테이블명 A
WHERE 1=1
<isNotEmpty prepend="AND" property="search조건1">
A.조건1컬럼 = #search조건1#
</isNotEmpty>
<isNotEmpty prepend="AND" property="search조건2">
A.조건2컬럼 = #search조건2#
</isNotEmpty>
<isNotEmpty prepend="AND" property="search조건3">
A.조건3컬럼 LIKE '%'||#search조건3#||'%'
</isNotEmpty>
ORDER BY DECODE(A.NOTICE_AT, 'Y', 1 ), A.PK DESC
</sql>
이렇게 하게 되면 serachList라는 곳에 notice_AT가 Y인 것에 1 이라는 값이 들어가게 되고,
그 후 정렬조건에 따라 정렬이 된다. 보통 PK 순으로 정렬을 하니 PK로 가정한다.
<select id="DAO.selectList" parameterClass="VO" resultClass="Map">
/* DAO.selectList */
SELECT *
FROM (
SELECT ROWNUM AS RNUM, A.*
FROM(
<include refid="searchList" /> <!-- 정제 된 List를 include -->
) A
) WHERE RNUM BETWEEN #firstIndex# AND #lastIndex#
</select>
실제로 호출하게 될 DAO.selectList를 수행할 때,
검색조건에 의해 정제 된 List를 include 하여 RNUM을 통해 다시 정렬하게 된다.
이 때 WHERE 조건에 의해, index 번호 즉 cnt 값을 넘길 수 있는데,
결과적으로 DECODE를 이용해 NOTICE_AT 의 값을 1/0으로 비교하여 상단에 출력할 수 있고,
그 후에는 PK에 따라 정렬되며, 페이징을 위한 index=cnt 를 매핑하여 처리할 수 있게 된다.
결과화면
전체 13건의 게시글에서, 한페이지에 10개까지 출력이 되며,
상단에 1, 2번 글은 공지사항으로 등록되어 있어 등록 순서와 상관 없이 최상단에 뜨게 하였으며,
공지사항인 것을 명시해주기 위해 배경 색상을 변경해주었다.
이 때 , jqGrid를 사용하였는데 jqGrid는 표를 다 만들어주기 때문에 Grid를 생성할 때 당시 조건을 걸어야 해당 값에만 배경이 바뀌게끔 할 수 있어 고생을 하였다.
필요한 사람이 있을지 몰라 소스도 남기겠다.
, loadComplete : function(data) {
var ids = $("#gridArea").getDataIDs();
// 해당id에 있는 gridData를 ids로 가져온다.
$.each(
ids,function(idx, rowId){
rowData = $("#gridArea").getRowData(rowId);
// rowData의 공지여부가 Y라면
if (rowData.noticeAt == 'Y') {
$("#gridArea").setRowData(rowId, false, { background:"#d9e6ff" });
}
}
);
fnCreateGridRow('gridArea', $("#gridArea").jqGrid("getGridParam").emptyrecords, data);
}
해당 부분의 each 문을 참조하면 된다.
'개발자노트 > DBMS' 카테고리의 다른 글
아이바티스 - 항목 별 합계 ( 대분류별 합계 소분류별 합계 ) (0) | 2022.12.22 |
---|---|
아이바티스 - 날짜 출력 object object 뜰 때 (TO_CHAR) (0) | 2022.12.22 |
[SQL] (Oracle) JDBC에서 selectAll (0) | 2022.07.05 |
[SQL] (Oracle) JDBC에서 selectOne (0) | 2022.07.05 |
[SQL] JDBC에서 delete (0) | 2022.07.05 |