이번 포스팅에서는 게시글의 생성일을 파라미터로 이용해서
간단한 게시판 페이징 (Paging) 기능을 구현하는 API를 만들려고 한다
Paging ?
게시판 글을 page 단위로 나누는 작업이다
한 page에 몇개의 데이터를 보여줄 건지도 개발자가 직접 정할 수 있도록 구현할 예정이다
API를 개발하기 위해 각각의 Controller,Service,DAO를 생성한다
사전작업
먼저, VO를 생성해서 구현했기 때문에, 해당 요청들에서 필요한 VO를 먼저 정의한다
[SearchVO]
게시글 리스트를 조회하기 위한 요청 파라미터 VO
user_no : 어떤 사용자가 조회했는지 확인하기 위한 사용자 번호
last_grid_date : 마지막에 보여진 게시글
length : 보여질 게시글 숫자
public class SearchVO {
private long user_no;
private String last_grid_date;
private int length;
public long getUser_no() {
return user_no;
}
public void setUser_no(long user_no) {
this.user_no = user_no;
}
public String getLast_grid_date() {
return last_grid_date;
}
public void setLast_grid_date(String last_grid_date) {
this.last_grid_date = last_grid_date;
}
public int getLength() {
return length;
}
public void setLength(int length) {
this.length = length;
}
}
|
cs |
[ReadVO]
매퍼에서 조회한 데이터를 담을 응답 VO
seq : 게시글 번호
write_user_no : 작성자
create_date : 생성 일자
title : 제목
description : 내용
public class ReadVO {
private long seq;
private long write_user_no;
private String create_date;
private String title;
private String description;
public long getSeq() {
return seq;
}
public void setSeq(long seq) {
this.seq = seq;
}
public long getWrite_user_seq() {
return write_user_seq;
}
public void setWrite_user_seq(long write_user_seq) {
this.write_user_seq = write_user_seq;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
}
|
cs |
게시글 리스트 페이징 하는 법
TestController
@Controller
@RequestMapping(value="/test/")
public class TestController {
@Autowired
TestService testService;
@RequestMapping(value="list", method = RequestMethod.GET)
@ResponseBody
public List<ReadVO> findList(@ModelAttribute SearchVO searchVO) {
List<ReadVO> list = testService.findList(searchVO);
return list;
}
|
cs |
list를 조회하는 Controller 요청을 만든다
해당 findList 메소드는 /test/list 로 요청했을 때, List<Map> 형태로 리스트를 조회해서 리턴하는 메소드다
TestService
@Service
public class TestService {
@Autowired
TestDao testDao;
public List<ReadVO> findList(SearchVO searchVO) {
List<ReadVO> resultList = testDao.findList(searchVO);
return resultList;
}
}
|
cs |
TestDao
Resource 어노테이션 매개 변수로는 SqlSessionFactoryBean을 설정했을 때, bean id를 입력해주면 된다
( 대게 db connection 설정은 app-context, root-context 라는 명칭으로 생성한다 )
@Repository
public class CommunityDao {
@Resource(name="[db bean id]")
private SqlSession sqlSession;
private static final String NAME_SPACE = "[dao의 현재 위치]"; // ex) com.test.test.dao.testDao
/**
* 커뮤니티 게시글 리스트 조회
* @param searchVO
* @return
*/
public List<ReadVO> findList(SearchVO searchVO) {
return sqlSession.selectList(NAME_SPACE+".findList",searchVO);
}
}
|
cs |
testMapper.xml
<mapper namespace="com.test.test.dao.testDao">
mapper 의 namespace에는 DAO에 입력해주었던 DAO 경로를 적어준다
last_grid_date :
해당 파라미터는 페이징을 하기 위한 데이터다
첫 조회 시 빈 값을 조회해서 length 만큼의 데이터를 가지고오고,
마지막 데이터의 create_date를 last_grid_date 파라미터로 입력해주면
마지막으로 조회된 글의 다음글부터 조회가 된다
ORDER BY A.create_date DESC
최신순으로 데이터를 가져오기 위한 정렬 조건
<?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.test.test.dao.testDao">
<select id="findList" resultType="com.test.test.vo.ReadVO" parameterType="com.test.test.vo.SearchVO">
SELECT seq,
write_user_no,
create_date,
title,
description
FROM board A
WHERE 1=1
AND A.delete_date IS NULL
<if test="last_grid_date != null and last_grid_date != ''">
AND A.create_date <![CDATA[<]]> #{last_grid_date}
</if>
ORDER BY A.create_date DESC limit #{length}
</select>
</mapper>
|
cs |
이제 데이터를 조회해보자
/test/list 라는 요청을 주게 되면 해당 데이터가 List 형태로 게시글을 리턴한다
다음 데이터를 조회하기 위해선, 마지막 게시글의 생성일자(last_grid_date)를 파라미터로 넘겨주면
마지막 게시글 다음 데이터부터 length 만큼의 데이터를 조회하게 된다
'개발 > BACK' 카테고리의 다른 글
[Ubuntu] 서버 Tomcat 꺼지면 재시작하는 스크립트 작성하기 (0) | 2022.05.23 |
---|---|
[Ubuntu] Linux 에서 톰캣 재시작 스크립트 작성하기 (0) | 2022.05.23 |
[Ubuntu 보안 설정] Fail2Ban SSH 구축 방법 무작위 대입 공격 (Brute-Force) 대응하기 (0) | 2022.05.03 |
Linux Ubuntu 톰캣 서버 구축 [1] (0) | 2022.04.28 |
ssh 원격 접속하기 (ssh key 설정 포함) (0) | 2022.04.28 |