[MyBatis] 페이징 처리Backend/MyBatis2022. 9. 28. 21:16
Table of Contents
반응형
웹 개발 시 페이징 처리는 필수입니다. MyBatis를 사용하여 페이징 처리하는 방법에 대해 알아보겠습니다.
데이터베이스는 Oracle
을 사용하였습니다.
기본 페이징
공지사항 조회 시 페이징을 예제로 만들었습니다.
Class 생성
공지사항 관련 Class와 페이징을 위한 Class를 생성하였습니다.
// Notice.java
@Data
public class Notice {
// 작성사용자ID
private String userId;
// 작성사용자명
private String userName;
// 제목
private String title;
// 내용
private String content;
// 조회수
private int hit;
}
// Pagination.java
@Data
public class Pagination {
// 페이지 번호
private int pageNo;
// 한 페이지당 데이터 수
private int amount;
}
Mapper 생성
// NoticeMapper.java
@Mapper
public interface NoticeMapper {
public List<Notice> getListWithPaging(Pagination pagination);
}
쿼리 작성
CDATA 태크는 XML에서 부등호를 사용하기 위함입니다.
<?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>
테스트
@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);
}
}
조회 조건 추가
위의 기본 페이징 형식에서 조회 조건을 추가하였습니다.
조회 조건 Class 생성
조회 조건 Class 를 생성하고, Pagination
Class 를 상속받았습니다.
// SearchParam.java
@Data
public class SearchParam extends Pagination {
// 작성사용자명
private String userName;
// 제목
private String title;
}
Mapper 수정
Mapper Class 에 조회 조건으로 조회하는 함수를 추가하였습니다.
// NoticeMapper.java
@Mapper
public interface NoticeMapper {
public List<Notice> getListWithPaging(Pagination pagination);
// 조회조건을 통해 조회
public List<Notice> getListWithCondition(SearchParam searchParam);
}
조회 쿼리 추가
<!-- NoticeMapper.xml -->
<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를 이용하여 페이징 처리를 해봤습니다.
반응형
'Backend > MyBatis' 카테고리의 다른 글
[MyBatis] 동적 쿼리 (0) | 2022.09.28 |
---|
@고지니어스 :: 규니의 개발 블로그
IT 기술과 개발 내용을 포스팅하는 블로그
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!