코딩공부/Java Spring

[spring실습] 게시판 만들기 - 조회수 추가, Oracle 컬럼 추가, default, null 설정

integerJI 2021. 1. 2. 15:40

[spring실습] 게시판 만들기 - 조회수 추가, Oracle 칼럼 추가, default, null 설정


[spring실습] 게시판 만들기 - 글 쓰기 기능 만들기 : integer-ji.tistory.com/341

[spring실습] 게시판 만들기 - 글 수정 기능 만들기 : integer-ji.tistory.com/342

[spring실습] 게시판 만들기 - 글 삭제 기능 만들기 : integer-ji.tistory.com/343

[spring실습] 게시판 만들기 - 상세(Detail) 페이지 추가 : integer-ji.tistory.com/346

 

이어서 진행 됩니다.


디테일 페이지에 진입할 때 얼마나 많은 사용자가 진입했는지 기록을 남기기 위한 조회수를 추가해 줍니다.

 

 

Oracle Table 조회수 카운트 추가하기

 

현재 게시판 만들기 기능을 사용하는 Table의 상태입니다.

 

 

테이블 명을 클릭하고 Alt + c를 누르면 테이블 상태를 확인할 수 있습니다.

 

조회수를 카운트하기 위해 칼럼 하나를 더 추가해 줍니다.

 

ALTER TABLE TB_PROJECT ADD VIEW_COUNT NUMBER;

SELECT * FROM TB_PROJECT ORDER BY PRO_ID DESC;

commit;

 

VIEW_COUNT 칼럼을 추가하여 줍니다. 

 

테이블에 컬럼을 추가할 때 null 값을 허용하지 않으며 default 값으로 0으로 설정하여 줍니다.

 

꼭 commit를 실행하며 select 문을 사용해 칼럼이 잘 추가되었는지 확인해 줍니다.

 

 

 

조회수 Count +1 Update문 추가, Select문 수정

<update id="viewCount">
	UPDATE
		TB_PROJECT
	SET
		VIEW_COUNT = VIEW_COUNT + 1
	WHERE
		PRO_ID = #{proId}
</update>

 

PRO_ID를 이용해 게시글 번호 당 VIEW_COUNT + 1을 해줍니다.

 

해당 쿼리문은 VIEW_COUNT에 + 1을 누적하여 실행시킵니다.

 

SELECT
	PRO_ID, 
	PRO_TITLE, 
	PRO_BODY, 
	PRO_DATE,
	VIEW_COUNT
FROM TB_PROJECT
ORDER BY PRO_ID DESC

 

Table에 VIEW_COUNT가 추가되었기 때문에 Select문을 수정하여 줍니다.

 

 

ProjectVO.java VIEW_COUNT 추가

private Integer viewCount;

public Integer getViewCount() {
	return viewCount;
}
public void setViewCount(Integer viewCount) {
	this.viewCount = viewCount;
}

 

viewCount를 VO에 Integer 형으로 getter과 setter을 추가하여 줍니다.

(getter과 setter을 추가하려는 private를 한번 누르고 Alt + Shift + s -> Generate Getters and Setters)

 

DAO 추가

void viewCount(int proId);

 

viewCount도 Delete와 마찬가지로 게시글 기준만 있으면 되기 때문에 proId만 받아줍니다.

 

 

Service 추가

void viewCount(int proId);

 

@Override
public void viewCount(int proId) {
	projectMapper.viewCount(proId);
}

 

 

Countroller 추가

/**
 * 글을 상세 페이지.
 * @return projectDetailForm
 */
@RequestMapping(value = "/projectDetailForm.do")
public String detailProject(@ModelAttribute("projectVO") ProjectVO projectVO, Model model) {

	// 조회수 증가
	projectService.viewCount(projectVO.getProId());
	
    List<ProjectVO> list = projectService.detailProject(projectVO.getProId());

    model.addAttribute("list", list);
    
	return "projectDetailForm";
}

 

Controller에서 글 상세 페이지 진입 시 조회수 중가 Api를 호출하여 줍니다.

 

Line 95를 통하여 detailProject가 호출될 때 viewCount도 같이 호출이 되어 조회수가 증가됩니다.

 

 

Test

 

projectList.jsp에 조회수를 추가하여 줍니다.

 

이제 서버를 실행시켜 보면

 

 

조회수 칸이 생겼으며

 

1번 "첫 글 제목"을 눌러 1번 게시글의 상세 페이지로 진입하면

 

 

조회수가 증가된 걸 확인할 수 있습니다.

 

참고 GitHub : github.com/integerJI/spring.git