1. 화면단

2. 구상
1. 게시글 10개 초과 시 섹션 증가
2. 공지글은 첫 페이지 상단에만
3. 10섹션이 넘어가면 화살표모양 버튼 생성
MAPPER - selectAllArticlesList 수정 후 사용 ( 반환타입 VO, 파라미터타입 넣기(Map??) )
DB 쿼리문 - 751p
DAO - List<ArticleVO>로 담기, 매개변수 Map
SERVICE - 변경 X
CONTROLLER - section, pageNum 변수 + 담을 그릇으로 Map 사용
JSP - MAPPER의 셀렉문 중 recNum 이용(count랑 비슷)
-> 그러면 recNum도 값을 빼와야하나? -> 일단 넣어서 돌려보기 -> 그냥 새로 쿼리문줘서
count로 빼와 recNum이라는 변수로 저장 -> recNum : 세션주기위한 변수
recNum 1~10 11~20 이런식으로 조건식줘서 출력되게? -> 일단 도전

recNum between(section-1)*100+(pageNum-1)*10+1 and (section-1)*100+pageNum*10;
풀이.
페이징을 하는데 1개의 pageNum마다 10개의 게시글이 출력이 된다. (1~10, 11~20)
pageNum이 10개를 초과했을 시 1개(기본:1)의 section이 되며
next버튼이 활성화 된다.(1:1~100 2:101~200)
이때, 다음 section을 가기 전까지는 pageNum은 무조건 10개 이하만 보인다.
반복문으로 1부터 증가하는 pageNum이 10보다 작거나 같다 -> true
반복문으로 1부터 증가하는 pageNum이 pageNo 14와 같다 -> false, false, .., true
pageNo = 14인데 web에서 pageNum은 무한대 증가
pageNo까지만 생성하고싶음
풀이. (처음으로)
section이 2이상일 때 [처음]이 생성되며 누를 시
section=1&pageNum=1로 이동
풀이. (마지막)
section이 2이상이 존재할 때 [마지막]이 생성되며 누를 시
section=마지막&pageNum=마지막으로 이동
현재 마지막 pageNum = 16
10 pageNum마다 1 section
[마지막] 누를 시 section=2&pageNum=16
3. 구현
3.1 DB
create table t_board(
articleType number(1), -- 0 : 공지, 1 : 일반
articleNO number(10) primary key,
parentNO number(10) default 0,
title varchar2(500) not null,
content varchar2(4000),
imageFileName varchar2(100),
writedate date default sysdate not null,
id varchar2(10),
views number(4),
CONSTRAINT FK_ID FOREIGN KEY(id)
REFERENCES t_member(id)
);
<mapper namespace="mapper.board">
<resultMap id="articlesResult" type="articleVO">
<result property="level" column="level" />
<result property="articleType" column="articleType" />
<result property="articleNO" column="articleNO" />
<result property="parentNO" column="parentNO" />
<result property="title" column="title" />
<result property="content" column="content" />
<result property="writeDate" column="writeDate" />
<result property="imageFileName" column="imageFileName" />
<result property="views" column="views" />
<result property="recNum" column="recNum" />
</resultMap>
<select id="selectAllArticlesList" resultMap="articlesResult" parameterType="java.util.Map" >
<![CDATA[
SELECT *
FROM (SELECT ROWNUM as recNum,LVL as "level",articleNO,parentNO,title,id,writeDate,
articleType,views
FROM (SELECT LEVEL as LVL,articleNO,parentNO,title,id,writeDate,articleType,
views
FROM t_board
START WITH parentNO=0
CONNECT BY PRIOR articleNO = parentNO
ORDER SIBLINGS BY articleType ASC))
WHERE recNum between(${section}-1)+(${pageNum}-1)*10+1 and (${section}-1)+${pageNum}*10
]]>
</select>
<select id="maxArticlelistNum" resultType="int">
<![CDATA[
SELECT count(articleNO)
FROM t_board
]]>
</select>
- selectAllArticlesList : 기존 쿼리문에서 변경 / 파라미터타입을 map으로 받아와 사용
- maxArticlelistNum : 게시글 총 개수를 가져오기 위함
3.3 BoardDAOImpl.class
@Override
public List<ArticleVO> selectAllArticlesList(Map<String, Object> articleMap) throws DataAccessException {
List<ArticleVO>articlesList = sqlSession.selectList("mapper.board.selectAllArticlesList", articleMap);
return articlesList;
}
@Override
public int maxArticlelistNum() throws DataAccessException {
return sqlSession.selectOne("mapper.board.maxArticlelistNum");
}
- selectAllArticlesList(Map<String, Object> articleMap) : articleMap의 key,value를 넣어 조건에 맞는 쿼리 값을 가져옴 / List<articleVO>로 반환
- maxArticlelistNum() : 게시글 총 개수를 가져옴 / int로 반환
3.4 BoardServiceImpl.class
@Override
public List<ArticleVO> listArticles(Map<String, Object> articleMap) throws Exception{
List<ArticleVO> articlesList = boardDAO.selectAllArticlesList(articleMap);
return articlesList;
}
@Override
public int maxArticleNum() throws Exception{
return boardDAO.maxArticlelistNum();
}