1. 1 화면단 [조회수 & 같은 세션일 시 증가X] : board/listArticles.do

list.drawio

list.jpg

2. 1 구상 [조회수 & 같은 세션일 시 증가X] : board/listArticles.do

조회수 증가
조건1. 로그인과 로그인없이 조회수 증가
조건1.1 조회수 올린 세션이 다시 조회수 올릴 수 없게
~~조건1.2 세션 유지시간 5분 (보류)~~
~~조건1.3 로그인 한 세션만 세션 만료 시 로그아웃 (보류)~~
~~조건1.4 alert('로그인 유지 시간 종료') -> 확인 누르면 로그아웃된 채로 (보류)~~
~~조건2. listArticles 화면에서 보이는 조회수는 999를 넘는 순간 999+로 표시 (보류)~~
~~조건2.1 viewArticle 에서는 조회수 정상적으로 표시 (보류)~~

DB - 조회 수 저장용 속성 추가 ( views number(4) )
쿼리문 - 조회하지 않는 이상 null이기떄문에 nvl로 null을 0으로
MAPPER - 조회수 증가용 updateArticle 생성
JSP - listArticle.jsp에서 views를 받게
session - ~~세션을 받고 세션에 봤던 articleNO 저장 -> 조건식으로 봤던 게시글 조회수 안오르게~~
->변경 -  List에 aritcleNO저장 -> Map에 세션저장 -> Map key를 이용해 조건식

noticeBoard_2_1.jpg

3. 구현 [조회수 & 같은 세션일 시 증가X] : board/listArticles.do

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" />
  </resultMap> 
  
    <select id="selectAllArticlesList" resultMap="articlesResult"   >
    <![CDATA[
      SELECT level, articleType, articleNO, parentNO, title, content, writeDate, 
      imageFileName, id, views
      from t_board
      START WITH  parentNO=0
      CONNECT BY PRIOR articleNO=parentNO 
      ORDER SIBLINGS BY articleType ASC
    ]]>
  </select>

3.3 BoardDAOImpl.class

@Override
public List<ArticleVO> selectAllArticlesList() throws DataAccessException {
	List<ArticleVO>articlesList = sqlSession.selectList("mapper.board.selectAllArticlesList");
	return articlesList;
}