아라한사님의 공부방

05. 페이징 기법처리

토픽 아라한사님의 공부방 > 하이버네이트/JPA

제가 하이버네이트를 배우면서 마음에 들었던 기능 중의 하나. 페이징을 바로 적으려 합니다.
일단 4회까지 영상은 모두 찍었고, 준비중인지라.. 일단 글만 미리 띄우고 양식을 준비하겠습니다. ㅎㅎ

http://www.mockaroo.com/
마침 이고잉님이 생활코딩에 올려주신 데모db내용물 제작사이트에서 내용을 얻어서 페이징을 해보겠습니다.

영상에서 잠시 php를 배우면서 페이징때 어려웠다고 하면서 하이버네이트에서 이렇게 한다고 말씀드렸는데, 자바로 처음 jsp로 페이징해도 똑같이 어려운 건 마찬가지입니다. 노파심에 잠시 적네요;;

더미 파일을 /src/main/resources 폴더에 dbsample.csv 라는 파일이름으로 넣어주고
FileReader_CVS를 만들어서 파일을 자바로 읽어들입니다.

FileReader 소스입니다. (영상에 나온대로 설정파일 포함해서 준비해주시는 것 잊지마세요 :) 

package chap05.paging;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.StringTokenizer;

public class FileReader_CVS {

    
	public static List<BoardArticle> getArticles() throws NumberFormatException, IOException, ParseException{
		BoardArticle boardArticle=null;
		StringTokenizer tokenizer;
		SimpleDateFormat transFormat = new SimpleDateFormat("MM/dd/yyyy");
		int id;
		String userId;
		String contents;
		Date dateWrite;
		
		BufferedReader br = new BufferedReader(new FileReader("src/main/resources/dbsample.csv"));
		ArrayList<BoardArticle> list = new ArrayList<BoardArticle>();
		String s;

		while((s=br.readLine())!=null){
			tokenizer = new StringTokenizer(s, ",");
			while(tokenizer.hasMoreElements()){
				id=Integer.parseInt(tokenizer.nextToken());
				userId = tokenizer.nextToken();
				contents=tokenizer.nextToken();
				dateWrite = transFormat.parse(tokenizer.nextToken());
				boardArticle = new BoardArticle(id, userId, contents, dateWrite);
				list.add(boardArticle);
			}
		}
		br.close();
		return list;
	}	
}

 

페이징 핵심소스

DaoCommon에 다음과 같은 페이징 소스를 넣어줍니다.

numPerPage는 꼭 static이 아니어도 됩니다(어쩌다보니 스태틱이 된;;)

private static  int numPerPage = 10;
    
	public List<?> getPagingList(int requestPage){
		Session session = factory.getCurrentSession();
		Transaction tx = session.beginTransaction();
		Query query = (Query) session.createQuery("from "+boardName +" order by id asc");

		query.setFirstResult((requestPage-1)*numPerPage); 
		query.setMaxResults(numPerPage); 
		
		List<?> members = query.list();
		tx.commit();
		return members;
	}

 

전부다 지워주기

public int deleteAllSetTable() {
    	Session session = factory.getCurrentSession();
		Transaction tx = session.beginTransaction();
		int result = session.createQuery("delete from " + boardName).executeUpdate();
		tx.commit();
		return result;
	}

카운트 세어주기

public long count() {
    	Session session = factory.getCurrentSession();
		Transaction tx = session.beginTransaction();
		long result = (Long) session.createCriteria(clazz).setProjection(Projections.rowCount()).uniqueResult();
		tx.commit();
		return result;
	}

 

다음 강좌부터는 이제 좀 개념과 함께 설명을 하려고 합니다. 

 

 

댓글

댓글 본문
  1. Scratchback
    잘 보고 있습니다. 감사합니다(5)