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

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를 이용해 조건식

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)
);
- 기존 t_board 테이블에 views number(4) 추가
- views : 조회수 저장
<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>
- <mapper namespace=”mapper.board”> : BoardDAO에서 mapper를 찾기위한 이름 지정
- <resultMap id=”articlesResult” type=”articleVO”>
- <result property=key column=value /> : key에 value값 저장
- 기존 조회 쿼리문에서 SELECT절에 views추가
- ORDER SIBLINGS BY articleType ASC : articleType을 기준으로 오름차순 정렬하여 공지글이 가장 먼저 저장되게함
3.3 BoardDAOImpl.class
@Override
public List<ArticleVO> selectAllArticlesList() throws DataAccessException {
List<ArticleVO>articlesList = sqlSession.selectList("mapper.board.selectAllArticlesList");
return articlesList;
}