하이버네이트/JPA - 자바의 ORM.

05. 페이징 기법처리

제가 하이버네이트를 배우면서 마음에 들었던 기능 중의 하나. 페이징을 바로 적으려 합니다.
일단 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)