Paging ์ฒ๋ฆฌ ํ ๊ฒ์(Search) ๊ธฐ๋ฅ ์ถ๊ฐ (์ ๋ชฉ, ๋ณธ๋ฌธ, ์์ฑ์)
์์ ํ์ด์ง ์ฒ๋ฆฌ๋ฅผ ํด์ฃผ์๊ณ ์ด๋ฒ์๋ ๊ฒ์ ๊ธฐ๋ฅ์ ์ถ๊ฐํ์๋ค.
๊ฒ์์ฐฝ์์ ์ ๋ชฉ, ๋ณธ๋ฌธ, ์์ฑ์๋ฅผ ์ ํํ์ฌ ๊ฒ์ํ ์ ์๋ค. ๋ํ ๊ฒ์ ๊ฒฐ๊ณผ๋ ํ์ด์ง ์ฒ๋ฆฌํ์ฌ ํ๋ฉด์ 10๊ฐ์ฉ ๋ณด์ฌ์ค๋ค.
1. Pager.jsp
- ๊ฒ์์ ์ฌ์ฉํ ๋ณ์ search, kind๋ฅผ ์ถ๊ฐํ๋ค
- Getter ์ Setter ๋ ์ถ๊ฐํด์ค๋ค
- getSearch() : ๊ฒ์์ฐฝ์ ์๋ฌด ๊ฐ๋ ๋ค์ด์์ง ์์ ๋ null์ด ์๋๋ผ ๊ณต๋ฐฑ์ ๋ฃ์ด์ค๋ค. --> 1 ํ์ด์ง๋ฅผ ๋ณด์ฌ์ค
//---------------๊ฒ์ ์ฌ์ฉ ๋ณ์ -------------------
private String search;
private String kind;
// Getter & Setter
public String getSearch() {
if(this.search == null) {
this.search = "";
}
return search;
}
public void setSearch(String search) {
this.search = search;
}
public String getKind() {
return kind;
}
public void setKind(String kind) {
this.kind = kind;
}
2. list.jsp - ๊ฒ์ form ํ๊ทธ ์ถ๊ฐ
- title ๋ฐ์ div ํ๊ทธ ์์ผ๋ก ๊ฒ์์ ํ์ํ ํ๊ทธ๋ค์ ์ถ๊ฐํ๋ค
- ์ ํํ ์ ์๋ ์ต์ ์๋ ์ ๋ชฉ, ๋ณธ๋ฌธ, ์์ฑ์๋ฅผ ๋ฃ์ด์ค๋ค
- ${pager.search} ๋ ์ฌ์ฉ์๊ฐ ๊ฒ์์ฐฝ์ ์ ๋ ฅํ ๊ฒ์ ๊ฐ
<h1 class="title">Notice List Page</h1>
<div>
<form action="./list">
<fieldset>
<select name="kind">
<option value="col1">์ ๋ชฉ</option>
<option value="col2">๋ณธ๋ฌธ</option>
<option value="col3">์์ฑ์</option>
</select>
<input type="text" name="search" value="${pager.search}">
<button type="submit">๊ฒ์</button>
</fieldset>
</form>
</div>
- list.jsp ํ์ธํ๊ธฐ
3. Mapper ์์
- Oracle ์ฌ์ฉ
- noticeMapper.xml ์์ id๊ฐ list์ธ select๋ฌธ ์์
- ๊ฒ์ ๊ฒฐ๊ณผ์ ๋ง๋ ํ์ด์ง ์๋ฅผ ๋ณด์ฌ์ฃผ๊ธฐ ์ํด id๊ฐ total์ธ select๋ฌธ์๋ ์ผ๋ถ where์ ๊ณผ ํ๋ผ๋ฏธํฐํ์ ์ ์ถ๊ฐํ๋ค.
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
<select id="total" resultType="Long" parameterType="Pager">
SELECT COUNT(noticeNum) FROM notice
WHERE noticeNum > 0
and
<choose>
<when test="kind=='col1'">
NOTICETITLE
</when>
<when test="kind=='col2'">
NOTICECONTENTS
</when>
<otherwise>
NOTICEWRITER
</otherwise>
</choose>
LIKE '%' || #{search} || '%'
</select>
<select id="list" parameterType="Pager" resultType="NoticeDTO">
SELECT * FROM
(SELECT rowNum R, B.* FROM
(SELECT * FROM notice
WHERE noticeNum > 0
and
<choose>
<when test="kind=='col1'">
NOTICETITLE
</when>
<when test="kind=='col2'">
NOTICECONTENTS
</when>
<otherwise>
NOTICEWRITER
</otherwise>
</choose>
LIKE '%' || #{search} || '%'
ORDER BY noticeNum DESC) B)
WHERE R between #{startRow} and #{lastRow}
</select>
|
cs |
4. NoticeDAO ์์
- NoticeDAO ์ ์ฒด ์ฝ๋
- total ๋ฉ์๋์ pager์ ์ถ๊ฐํ๋ค
@Repository
public class NoticeDAO {
@Autowired
private SqlSession sqlSession;
private final String NAMESPACE = "com.spring.s1.notice.NoticeDAO.";
//Detail
public NoticeDTO detail(NoticeDTO noticeDTO) throws Exception{
return sqlSession.selectOne(NAMESPACE + "detail", noticeDTO);
}
//total
public Long total(Pager pager) throws Exception {
return sqlSession.selectOne(NAMESPACE + "total", pager);
}
//List
public List<NoticeDTO> list(Pager pager) throws Exception{
return sqlSession.selectList(NAMESPACE + "list", pager);
}
//Insert
public int add(NoticeDTO noticeDTO) throws Exception{
return sqlSession.insert(NAMESPACE + "add", noticeDTO);
}
//Delete
public int delete(NoticeDTO noticeDTO) throws Exception{
return sqlSession.delete(NAMESPACE + "delete", noticeDTO);
}
}
5. NoticeService ์์
- DAO๋ฅผ ์์ ํ์ผ๋ฏ๋ก Service๋ ์์ ํด์ค๋ค
- list ๋ฉ์๋ ๋ด์์ noticeDAO.total() ์ noticeDAO.total(pager)๋ก ์์ ํ๋ค
@Service
public class NoticeService {
@Autowired
private NoticeDAO noticeDAO;
//add
public int add(NoticeDTO noticeDTO) throws Exception {
return noticeDAO.add(noticeDTO);
}
//detail
public NoticeDTO detail(NoticeDTO noticeDTO) throws Exception {
return noticeDAO.detail(noticeDTO);
}
//list
public List<NoticeDTO> list(Pager pager) throws Exception {
pager.makeRow();
Long totalCount = noticeDAO.total(pager);
pager.makeNum(totalCount);
List<NoticeDTO> ar = noticeDAO.list(pager);
return ar;
}
}
6. list.jsp - a ํ๊ทธ ์์
- ์ฃผ์์ฐฝ์ kind์ search ๊ฐ ์ ์ก (๋ฐ์ค ์น ๋ถ๋ถ ์ถ๊ฐ)
<a href="./list?page=${i}&kind=${pager.kind}&search=${pager.search}">${i}</a>
- get ๋ฐฉ์์ผ๋ก ๋์ด์ค๊ธฐ ๋๋ฌธ์ ์ฃผ์์ฐฝ์ kind, search ๊ฐ์ด ๋ณด์ธ๋ค
ex) ๋ณธ๋ฌธ์ ์ ํํ๊ณ 9๋ฅผ ๊ฒ์ํ์ ๊ฒฝ์ฐ : http://localhost/s1/notice/list?kind=col2&search=9 ์ถ๋ ฅ
col2์ ๋ณธ๋ฌธ, 9๋ ๊ฒ์์ฐฝ ์ ๋ ฅ๊ฐ
<div>
<c:if test="${pager.pre}">
<a class="page-button" href="./list?page=${pager.startNum-1}">PREVIEW</a>
</c:if>
<c:forEach begin="${pager.startNum}" end="${pager.lastNum}" var="i">
<a href="./list?page=${i}&kind=${pager.kind}&search=${pager.search}">${i}</a>
</c:forEach>
<c:if test="${pager.next}">
<a class="page-button" href="./list?page=${pager.lastNum+1}">NEXT</a>
</c:if>
</div>
7. ๊ฒ์๊ธฐ๋ฅ ์๋ ํ์ธ
- List ์ฒซ ํ๋ฉด (๊ฒ์์ฐฝ์ ์๋ฌด๊ฒ๋ ์ ๋ ฅํ์ง ์์์ ๊ฒฝ์ฐ)
- ์ ๋ชฉ ์ต์ ์ ์ ํํ๊ณ 2๋ฅผ ๊ฒ์ํ ๊ฒฝ์ฐ
- ๋ณธ๋ฌธ ์ต์ ์ ์ ํํ๊ณ 9๋ฅผ ๊ฒ์ํ ๊ฒฝ์ฐ
- ์์ฑ์ ์ต์ ์ ์ ํํ๊ณ 5๋ฅผ ๊ฒ์ํ ๊ฒฝ์ฐ
- ๊ฒ์ ๊ฒฐ๊ณผ์ ๋ฐ๋ผ ํ์ด์ง ์๋ ์ฌ๋ฐ๋ฅด๊ฒ ๋์ค๋ ๊ฒ์ ํ์ธํ ์ ์๋ค.