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