제가 하이버네이트를 배우면서 마음에 들었던 기능 중의 하나. 페이징을 바로 적으려 합니다.
일단 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;
}
다음 강좌부터는 이제 좀 개념과 함께 설명을 하려고 합니다.

