본문 바로가기
Framework/Spring

Spring(Mybatis) 게시판 이전글 다음글 가져오기 구현방법 및 쿼리

by 나비와꽃기린 2019. 1. 23.
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
1. 화면단

//이전글
$("#preDoc").on("click",function(){
	_this.preNextDoc('pre');
});

//다음글
$("#nxtDoc").on("click",function(){
	_this.preNextDoc('next');
});


preNextDoc : function(flag){
			var _this = this;
			var params = {
					docnum : _this.docnum,
					brdCode : _this.brdCode,
					brdType : _this.brdType,
					flag : flag, //pre,nxt
					viewFlag : _this.viewFlag
			}
			
			$.ajax({
				type:"POST",
				url: ePortalConfig.boardContext+"/preNextDoc",
				dataType: "json",
				data : params,
				cache 	: false,
				success : function(res){
                                      //이하 생략



2. 서버단( Controller, Service, Dao )

//컨트롤러에서 파라미터 및 권한처리
//서비스단에서 비즈니스로직 처리를 하지만
//예제소개로는 필요없는 부분이니 생략하겠습니다.

//Controller
@RequestMapping(value = "/preNextDoc")
public @ResponseBody Map preNextDoc(HttpServletRequest req) { // TODO
  //파라미터 체크 생략
  Map result = new HashMap();
  //권한처리 생략
  result = boardService.preNextDoc(param);  
  return result;
  
}


//Service
 public Map preNextDoc(DataEntity param) {
    Map resultObject = new HashMap();
    List result = new ArrayList();
    try{
      //구분값에 따라 분기처리
      if( "pre".equals(param.getString("flag"))){
		result = boardDao.getPreDocNum(param);
	}else{
		result = boardDao.getNextDocNum(param);
      }
      resultObject.put(EppltConstants.RESULT_ITEM, result );
      resultObject.put(EppltConstants.RESULT_CODE, "200");
      
    }catch(EpptlException e){
      resultObject.put(EppltConstants.RESULT_CODE, "500");
      resultObject.put(EppltConstants.RESULT_MESSAGE, e.getMessage());
    } 
    
    return resultObject;
  }


//DAO
public List getPreDocNum(DataEntity param) {
	return sqlSession.selectList("BoardSql.getPreDocNum",param);
}
public List getNextDocNum(DataEntity param) {
	return sqlSession.selectList("BoardSql.getNextDocNum",param);
}



3. 쿼리(ORACLE)

/SQL

//현재 보고있는 게시글번호보다 작은 게시글번호를 애들중에서 가장 큰 값을 찾으면 된다.
//이전게시글 찾기
select DOC_NUM
from T_DOCUMENT
WHERE 1=1
and DOC_NUM IN (
         SELECT MAX(DOC_NUM)
         FROM T_DOCUMENT A, V_USER B
         WHERE 1=1
         and A.WRITE_USER_ID = B.OM_NO   
         and A.DOC_STATUS='100'
         and TO_CHAR(sysdate,'YYYYMMDDHH24MISS') - TO_CHAR(A.DOC_START_DATE) >  0  /* 예약게시글 제외*/
         and TO_CHAR(sysdate,'YYYYMMDDHH24MISS') - TO_CHAR(A.DOC_END_DATE)  <   0  /* 예약게시글 제외*/
         and A.DOC_NUM < #{docnum}
 )


//현재 보고있는 게시글번호보다 큰 게시글번호를 애들중에서 가장 작은 값을 찾으면 된다.
//다음게시글 찾기
select DOC_NUM
from T_DOCUMENT
WHERE 1=1
and DOC_NUM IN (
         SELECT MIN(DOC_NUM)
         FROM T_DOCUMENT A, V_USER B
         WHERE 1=1
         and A.WRITE_USER_ID = B.OM_NO   
         and A.DOC_STATUS='100'
         and TO_CHAR(sysdate,'YYYYMMDDHH24MISS') - TO_CHAR(A.DOC_START_DATE) >  0  /* 예약게시글 제외*/
         and TO_CHAR(sysdate,'YYYYMMDDHH24MISS') - TO_CHAR(A.DOC_END_DATE)  <   0  /* 예약게시글 제외*/
         and A.DOC_NUM > #{docnum}
 )