웹 개발 시 페이징 처리는 필수입니다. MyBatis를 사용하여 페이징 처리하는 방법에 대해 알아보겠습니다.
데이터베이스는 Oracle
을 사용하였습니다.
1. 기본 페이징
공지사항 조회 시 페이징을 예제로 만들었습니다.
Class 생성
공지사항 관련 Class와 페이징을 위한 Class를 생성하였습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| @Data public class Notice {
private String userId;
private String userName;
private String title;
private String content;
private int hit; }
|
1 2 3 4 5 6 7 8 9 10
| @Data public class Pagination {
private int pageNo;
private int amount; }
|
Mapper 생성
1 2 3 4 5 6
| @Mapper public interface NoticeMapper {
public List<Notice> getListWithPaging(Pagination pagination); }
|
쿼리 작성
CDATA 태크는 XML에서 부등호를 사용하기 위함입니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.hgko.test.repository.NoticeMapper">
<select id="getListWithPaging" resultType="Notice" parameterType="Pagination"> <![CDATA[ SELECT USER_NAME, TITLE, CONTENT FROM ( SELECT *, ROWNUM RN FROM TB_NOTICE WHERE ROWNUM <= #{pageNo} * #{amount} ) WHERE RN > (#{pageNo} - 1) * #{amount} ]]> </select>
</mapper>
|
테스트
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| @RunWith(SpringRunner.class) @MybatisTest public class NoticeMapperTest {
@Autowired private NoticeMapper noticeMapper;
@Test public void getListTest() {
Pagination pagination = new Pagination(); pagination.setPageNo(1); pagination.SetAmount(10);
List<Notice> notices = noticeMapper.getListWithPaging(pagination); System.out.println(notices); } }
|
2. 조회 조건 추가
위의 기본 페이징 형식에서 조회 조건을 추가하였습니다.
조회 조건 Class 생성
조회 조건 Class 를 생성하고, Pagination
Class 를 상속받았습니다.
1 2 3 4 5 6 7 8 9 10
| @Data public class SearchParam extends Pagination {
private String userName;
private String title; }
|
Mapper 수정
Mapper Class에 조회 조건으로 조회하는 함수를 추가하였습니다.
1 2 3 4 5 6 7 8 9
| @Mapper public interface NoticeMapper {
public List<Notice> getListWithPaging(Pagination pagination);
public List<Notice> getListWithCondition(SearchParam searchParam); }
|
조회 쿼리 추가
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| <select id="getListWithCondition" resultType="Notice" parameterType="SearchParam"> SELECT USER_NAME, TITLE, CONTENT FROM ( SELECT *, ROWNUM RN FROM ( SELECT * FROM TB_NOTICE <trim prefix="WHERE" prefixOverrides="AND|OR"> <if test="userName != null and userName != ''"> AND USER_NAME LIKE %'||#{userName}||'%' </if> <if test="title != null and title != ''"> AND TITLE LIKE %'||#{title}||'%' </if> </trim> ) <![CDATA[ WHERE ROWNUM <= #{pageNo} * #{amount} ]]> ) <![CDATA[ WHERE RN > (#{pageNo} - 1) * #{amount} ]]> </select>
|
MyBatis 와 Oracle DB를 이용하여 페이징 처리를 해봤습니다.