1. 화면단

화면단3단계.jpg

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 이런식으로 조건식줘서 출력되게? -> 일단 도전

noticeBoard_3_1.jpg

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)
);

3.2 mapper.xml (MyBatis) - listArticles.do

<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>

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");
	}

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();
	}