게시판 조회수 올리기 | [다중,멀티 게시판 만들기] 14 – 조회수 하루에 1번만 올리기 729 명이 이 답변을 좋아했습니다

당신은 주제를 찾고 있습니까 “게시판 조회수 올리기 – [다중,멀티 게시판 만들기] 14 – 조회수 하루에 1번만 올리기“? 다음 카테고리의 웹사이트 th.taphoamini.com 에서 귀하의 모든 질문에 답변해 드립니다: https://th.taphoamini.com/wiki/. 바로 아래에서 답을 찾을 수 있습니다. 작성자 유니다고 이(가) 작성한 기사에는 조회수 315회 및 좋아요 3개 개의 좋아요가 있습니다.

Table of Contents

게시판 조회수 올리기 주제에 대한 동영상 보기

여기에서 이 주제에 대한 비디오를 시청하십시오. 주의 깊게 살펴보고 읽고 있는 내용에 대한 피드백을 제공하세요!

d여기에서 [다중,멀티 게시판 만들기] 14 – 조회수 하루에 1번만 올리기 – 게시판 조회수 올리기 주제에 대한 세부정보를 참조하세요

쿠키를 이용해 히트수를 하루에 한번만 올리게 해보겠습니다.

게시판 조회수 올리기 주제에 대한 자세한 내용은 여기를 참조하세요.

[Spring] 개인 게시판 만들기 (4) – 게시판 글 조회수 증가

게시글을 클릭하면 조회수가 올라가도록 하는 글을 포스팅 하도록 하겠습니다. reviewMapper.xml

+ 자세한 내용은 여기를 클릭하십시오

Source: lightchan.tistory.com

Date Published: 9/18/2021

View: 8308

[spring실습] 게시판 만들기 – 조회수 추가, Oracle 컬럼 추가 …

Oracle Table 조회수 카운트 추가하기. 현재 게시판 만들기 기능을 사용하는 Table의 상태입니다.

+ 자세한 내용은 여기를 클릭하십시오

Source: integer-ji.tistory.com

Date Published: 3/23/2021

View: 197

스프링부트 게시판 만들기 (8) – 조회수 증가 기능 추가 – 기록장

1. service 수정 · 2. dao 함수 추가 · 3. xml 수정 · 4. 실제로 조회수 업데이트 해보기.

+ 자세한 내용은 여기를 클릭하십시오

Source: developeryoung.tistory.com

Date Published: 4/25/2022

View: 4402

[JSP]게시판 게시글 조회수 기능 구현 – 네이버블로그

1. bbs테이블에 int형 bbsCount 칼럼을 추가해준다. · ​ · 2. · ​ · 3. · 우선 하나의 글 내용을 불러오는 함수 getBbs에 7열에 해당하는 값을 저장하는 …

+ 여기를 클릭

Source: blog.naver.com

Date Published: 3/18/2021

View: 4505

게시판 조회수 올리기 | [다중,멀티 게시판 만들기] 14

게시판 조회수 올리기 | [다중,멀티 게시판 만들기] 14 – 조회수 하루에 1번만 올리기 232 개의 가장 정확한 답변 · 게시글 조회수 올리는 방법 · [JSP] …

+ 더 읽기

Source: you.1111.com.vn

Date Published: 8/25/2021

View: 1182

[테크노트 CGI] 게시판 조회수 올리는 방법 > 기술자료

글 조회수 카운타를, 동일인이라도 본문 열때마다 카운트 올라가게 하려면 read.cgi 에서 return if($COOKIE{‘ReadT…

+ 여기에 더 보기

Source: www.happyjung.com

Date Published: 8/4/2021

View: 9392

스프링 게시판 만들기 – 7 (1) (조회수, 댓글 작성) – 완두콩의 텃밭

이전 스프링 게시판 만들기 – 6 에서 페이징 처리와 검색을 구현해보았다. 이번에는 간단하게 조회수를 올리는 기능과, 댓글 기능 을 구현해보려 …

+ 자세한 내용은 여기를 클릭하십시오

Source: dodokong.tistory.com

Date Published: 9/6/2022

View: 4241

게시판 조회수 올리기 API 작업하다가 문득 궁금한점이 생겼 …

저는 react, express로 풀스택으로 게시판을 만들고 잇습니다. 제가 궁금한게 예를 들어서….API를 만들면. 여기 경로에서 게시물을 불러오고 조회수를 올리는 로직을 …

+ 여기에 더 보기

Source: okky.kr

Date Published: 7/3/2021

View: 9605

주제와 관련된 이미지 게시판 조회수 올리기

주제와 관련된 더 많은 사진을 참조하십시오 [다중,멀티 게시판 만들기] 14 – 조회수 하루에 1번만 올리기. 댓글에서 더 많은 관련 이미지를 보거나 필요한 경우 더 많은 관련 기사를 볼 수 있습니다.

[다중,멀티 게시판 만들기] 14 - 조회수 하루에 1번만 올리기
[다중,멀티 게시판 만들기] 14 – 조회수 하루에 1번만 올리기

주제에 대한 기사 평가 게시판 조회수 올리기

  • Author: 유니다고
  • Views: 조회수 315회
  • Likes: 좋아요 3개
  • Date Published: 2018. 12. 9.
  • Video Url link: https://www.youtube.com/watch?v=xnDMSP4XJgQ

[Spring] 개인 게시판 만들기 (4) – 게시판 글 조회수 증가

728×90

반응형

게시글을 클릭하면 조회수가 올라가도록 하는 글을 포스팅 하도록 하겠습니다.

reviewMapper.xml

update reviewTable set reCnt = reCnt + 1 where reNum = #{reNum}

update문으로 조회수(reCnt)를 1씩 증가시켜주도록 합니다.

reviewmapper.java

// 문의글 조회수 올리기 public int updatereviewcnt(String reNum);

reviewService.java

// 조회수 올리기 public int updatereviewcnt(String reNum) throws Exception { return reviewmapper.updatereviewcnt(reNum); }

reviewController.java

// 게시글 자세히보기 @RequestMapping(value=”/detailreview”) public ModelAndView detail(@RequestParam(“reNum”) String reNum) throws Exception { // 기존의 게시글 자세히 보기에서 추가된 부분 reviewservice.updatereviewcnt(reNum); return new ModelAndView(“detail”,”detail1″,reviewservice.detail(reNum)); } // 추가된 부분 // reviewservice.updatereviewcnt(reNum);

글을 누르기 전

글을 누른 후

728×90

반응형

조회수 추가, Oracle 컬럼 추가, default, null 설정

[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 TB_PROJECT SET VIEW_COUNT = VIEW_COUNT + 1 WHERE PRO_ID = #{proId}

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

스프링부트 게시판 만들기 (8)

어떤 사람이 어떤 글을 클릭했을 때 그 글의 조회수가 증가해야한다.

나는 글을 클릭했을 때 해당 글을 가져오는 것과 조회수 증가를 같은 service단에 둘려고 한다

-> 1. 해당 idx의 hit 를 1 증가 시키고 2. 해당 idx 글을 select하기 의 순서로 진행할 것임

1. service 수정

hit를 update시키는 boarddao함수를 추가해준다.

2. dao 함수 추가

3. xml 수정

idx가 일치하는 데이터의 hit를 1증가시켜준다 (update)

4. 실제로 조회수 업데이트 해보기

이 페이지에서 1번 글을 클릭하고 다시 목록으로 돌아왔을 때 조회수가 3이 되어 있는지 확인해보자.

클릭했을 때 해당 내용이 잘 보이고

다시 글 목록 화면으로 돌아와보니 조회수가 잘 업데이트 된 것을 확인할 수 있다 !!

반응형

[JSP]게시판 게시글 조회수 기능 구현

1. bbs테이블에 int형 bbsCount 칼럼을 추가해준다.

2. Bbs에도 bbsCount 게터세터 추가

3. bbsDAO에는 어떻게 추가할까요~?

우선 하나의 글 내용을 불러오는 함수 getBbs에 7열에 해당하는 값을 저장하는 bbsCount를 ++을 해주고 countUpdate함수를 이용해 db에 bbsCount 값을 넣어주어요~

선택한 게시글을 보여주는 view.jsp페이지에서 getBbs함수를 사용하니 bbsCount가 1씩 올라가겠지요~

게시판 조회수 올리기 | [다중,멀티 게시판 만들기] 14 – 조회수 하루에 1번만 올리기 212 개의 자세한 답변

당신은 주제를 찾고 있습니까 “게시판 조회수 올리기 – [다중,멀티 게시판 만들기] 14 – 조회수 하루에 1번만 올리기“? 다음 카테고리의 웹사이트 https://you.1111.com.vn 에서 귀하의 모든 질문에 답변해 드립니다: https://you.1111.com.vn/blog/. 바로 아래에서 답을 찾을 수 있습니다. 작성자 유니다고 이(가) 작성한 기사에는 조회수 312회 및 좋아요 3개 개의 좋아요가 있습니다.

게시판 조회수 올리기 주제에 대한 동영상 보기

여기에서 이 주제에 대한 비디오를 시청하십시오. 주의 깊게 살펴보고 읽고 있는 내용에 대한 피드백을 제공하세요!

d여기에서 [다중,멀티 게시판 만들기] 14 – 조회수 하루에 1번만 올리기 – 게시판 조회수 올리기 주제에 대한 세부정보를 참조하세요

쿠키를 이용해 히트수를 하루에 한번만 올리게 해보겠습니다.

게시판 조회수 올리기 주제에 대한 자세한 내용은 여기를 참조하세요.

[Spring] 개인 게시판 만들기 (4) – 게시판 글 조회수 증가

게시글을 클릭하면 조회수가 올라가도록 하는 글을 포스팅 하도록 하겠습니다. reviewMapper.xml + 자세한 내용은 여기를 클릭하십시오 Source: lightchan.tistory.com Date Published: 1/3/2022 View: 5956 [spring실습] 게시판 만들기 – 조회수 추가, Oracle 컬럼 추가 … Oracle Table 조회수 카운트 추가하기. 현재 게시판 만들기 기능을 사용하는 Table의 상태입니다. + 자세한 내용은 여기를 클릭하십시오 Source: integer-ji.tistory.com Date Published: 6/26/2021 View: 8500 게시판 조회수 올리기 | [다중,멀티 게시판 만들기] 14 게시판 조회수 올리기 | [다중,멀티 게시판 만들기] 14 – 조회수 하루에 1번만 올리기 232 개의 가장 정확한 답변 · 게시글 조회수 올리는 방법 · [JSP] … + 여기에 표시 Source: you.prairiehousefreeman.com Date Published: 3/11/2022 View: 922 스프링부트 게시판 만들기 (8) – 조회수 증가 기능 추가 – 기록장 1. service 수정 · 2. dao 함수 추가 · 3. xml 수정 · 4. 실제로 조회수 업데이트 해보기. + 자세한 내용은 여기를 클릭하십시오 Source: developeryoung.tistory.com Date Published: 12/22/2022 View: 6020 Top 46 게시판 조회수 올리기 7903 Votes This Answer 게시글 조회수 올리는 방법 – 자유 게시판 – 포우회32. Article author: m.cafe.daum.net; Reviews from users: 45124 ⭐ Ratings; Top rated: 3.0 … + 여기에 표시 Source: toplist.avitour.vn Date Published: 5/18/2022 View: 5300 스프링 게시판 만들기 – 7 (1) (조회수, 댓글 작성) – 완두콩의 텃밭 이전 스프링 게시판 만들기 – 6 에서 페이징 처리와 검색을 구현해보았다. 이번에는 간단하게 조회수를 올리는 기능과, 댓글 기능 을 구현해보려 … + 여기에 보기 Source: dodokong.tistory.com Date Published: 1/4/2022 View: 3632 [테크노트 CGI] 게시판 조회수 올리는 방법 > 기술자료 글 조회수 카운타를, 동일인이라도 본문 열때마다 카운트 올라가게 하려면 read.cgi 에서 return if($COOKIE{‘ReadT… + 더 읽기 Source: www.happyjung.com Date Published: 9/4/2021 View: 6376 게시판 조회수 올리기 API 작업하다가 문득 궁금한점이 생겼 … 저는 react, express로 풀스택으로 게시판을 만들고 잇습니다. 제가 궁금한게 예를 들어서….API를 만들면. 여기 경로에서 게시물을 불러오고 조회수를 올리는 로직을 … + 더 읽기 Source: okky.kr Date Published: 1/18/2022 View: 6474 주제와 관련된 이미지 게시판 조회수 올리기 주제와 관련된 더 많은 사진을 참조하십시오 [다중,멀티 게시판 만들기] 14 – 조회수 하루에 1번만 올리기. 댓글에서 더 많은 관련 이미지를 보거나 필요한 경우 더 많은 관련 기사를 볼 수 있습니다. [다중,멀티 게시판 만들기] 14 – 조회수 하루에 1번만 올리기 주제에 대한 기사 평가 게시판 조회수 올리기 Author: 유니다고

Views: 조회수 312회

Likes: 좋아요 3개

Date Published: 2018. 12. 9.

Video Url link: https://www.youtube.com/watch?v=xnDMSP4XJgQ [Spring] 개인 게시판 만들기 (4) – 게시판 글 조회수 증가 728×90 반응형 게시글을 클릭하면 조회수가 올라가도록 하는 글을 포스팅 하도록 하겠습니다. reviewMapper.xml update문으로 조회수(reCnt)를 1씩 증가시켜주도록 합니다. reviewmapper.java // 문의글 조회수 올리기 public int updatereviewcnt(String reNum); reviewService.java // 조회수 올리기 public int updatereviewcnt(String reNum) throws Exception { return reviewmapper.updatereviewcnt(reNum); } reviewController.java // 게시글 자세히보기 @RequestMapping(value=”/detailreview”) public ModelAndView detail(@RequestParam(“reNum”) String reNum) throws Exception { // 기존의 게시글 자세히 보기에서 추가된 부분 reviewservice.updatereviewcnt(reNum); return new ModelAndView(“detail”,”detail1″,reviewservice.detail(reNum)); } // 추가된 부분 // reviewservice.updatereviewcnt(reNum); 글을 누르기 전 글을 누른 후 728×90 반응형 조회수 추가, Oracle 컬럼 추가, default, null 설정 [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 TB_PROJECT SET VIEW_COUNT = VIEW_COUNT + 1 WHERE PRO_ID = #{proId}

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

게시판 조회수 올리기 | [다중,멀티 게시판 만들기] 14 – 조회수 하루에 1번만 올리기 232 개의 가장 정확한 답변

We are using cookies to give you the best experience on our website. You can find out more about which cookies we are using or switch them off in settings.

스프링부트 게시판 만들기 (8)

어떤 사람이 어떤 글을 클릭했을 때 그 글의 조회수가 증가해야한다. 나는 글을 클릭했을 때 해당 글을 가져오는 것과 조회수 증가를 같은 service단에 둘려고 한다 -> 1. 해당 idx의 hit 를 1 증가 시키고 2. 해당 idx 글을 select하기 의 순서로 진행할 것임 1. service 수정 hit를 update시키는 boarddao함수를 추가해준다. 2. dao 함수 추가 3. xml 수정 idx가 일치하는 데이터의 hit를 1증가시켜준다 (update) 4. 실제로 조회수 업데이트 해보기 이 페이지에서 1번 글을 클릭하고 다시 목록으로 돌아왔을 때 조회수가 3이 되어 있는지 확인해보자. 클릭했을 때 해당 내용이 잘 보이고 다시 글 목록 화면으로 돌아와보니 조회수가 잘 업데이트 된 것을 확인할 수 있다 !! 반응형

Top 46 게시판 조회수 올리기 7903 Votes This Answer

[다중,멀티 게시판 만들기] 14 – 조회수 하루에 1번만 올리기 [다중,멀티 게시판 만들기] 14 – 조회수 하루에 1번만 올리기 Read More [spring실습] 게시판 만들기 – 조회수 추가 Oracle 컬럼 추가 default null 설정 티스토리툴바 Read More 기록장 스프링부트 게시판 만들기 (8) – 조회수 증가 기능 추가 본문 티스토리툴바 Read More 태그 관련글 댓글8 공지사항 최근글 인기글 최근댓글 태그 전체 방문자 티스토리툴바 Read More 메인메뉴 전체메뉴 기술자료 기술자료 카테고리 테크노트 [테크노트 CGI] 게시판 조회수 올리는 방법 페이지 정보 본문 댓글목록 댓글쓰기 기술자료 카테고리 접속자집계 게시글 조회수 올리는 방법 – 자유 게시판 – 포우회32 Article author: m.cafe.daum.net Reviews from users: 45124 Ratings Ratings Top rated: 3.0 Lowest rated: 1 Summary of article content: Articles about 게시글 조회수 올리는 방법 – 자유 게시판 – 포우회32 [스크랩] 게시글 조회수 올리는 방법 · 1. 카페에 글을 게시한다. · 2. 게시한 글을 우측상단의 수정,삭제글 아레에 있는 리본 다음의 화살표를 크릭하면 … … Most searched keywords: Whether you are looking for 게시글 조회수 올리는 방법 – 자유 게시판 – 포우회32 [스크랩] 게시글 조회수 올리는 방법 · 1. 카페에 글을 게시한다. · 2. 게시한 글을 우측상단의 수정,삭제글 아레에 있는 리본 다음의 화살표를 크릭하면 … 모든 이야기의 시작, Daum 카페 Table of Contents: 자유 게시판 카페 검색 게시글 조회수 올리는 방법 – 자유 게시판 – 포우회32 Read More [JSP]게시판 게시글 조회수 기능 구현 : 네이버 블로그 Article author: blog.naver.com Reviews from users: 23784 Ratings Ratings Top rated: 4.4 Lowest rated: 1 Summary of article content: Articles about [JSP]게시판 게시글 조회수 기능 구현 : 네이버 블로그 1. bbs테이블에 int형 bbsCount 칼럼을 추가해준다. · ​ · 2. · ​ · 3. · 우선 하나의 글 내용을 불러오는 함수 getBbs에 7열에 해당하는 값을 저장하는 … … Most searched keywords: Whether you are looking for [JSP]게시판 게시글 조회수 기능 구현 : 네이버 블로그 1. bbs테이블에 int형 bbsCount 칼럼을 추가해준다. · ​ · 2. · ​ · 3. · 우선 하나의 글 내용을 불러오는 함수 getBbs에 7열에 해당하는 값을 저장하는 … Table of Contents: 블로그 악성코드가 포함되어 있는 파일입니다 작성자 이외의 방문자에게는 이용이 제한되었습니다 [JSP]게시판 게시글 조회수 기능 구현 : 네이버 블로그 Read More OKKY – 게시판 조회수 올리기 API 작업하다가 문득 궁금한점이 생겼습니다. Article author: okky.kr Reviews from users: 21087 Ratings Ratings Top rated: 3.8 Lowest rated: 1 Summary of article content: Articles about OKKY – 게시판 조회수 올리기 API 작업하다가 문득 궁금한점이 생겼습니다. 저는 react, express로 풀스택으로 게시판을 만들고 잇습니다. … 아니면,. 이렇게해서 게시물 조회와 조회수를 올리는 로직을 따로 둘지 고민입니다. GET … … Most searched keywords: Whether you are looking for OKKY – 게시판 조회수 올리기 API 작업하다가 문득 궁금한점이 생겼습니다. 저는 react, express로 풀스택으로 게시판을 만들고 잇습니다. … 아니면,. 이렇게해서 게시물 조회와 조회수를 올리는 로직을 따로 둘지 고민입니다. GET … Table of Contents: OKKY – 게시판 조회수 올리기 API 작업하다가 문득 궁금한점이 생겼습니다. Read More See more articles in the same category here: https://toplist.avitour.vn/blog/. [Spring] 개인 게시판 만들기 (4) – 게시판 글 조회수 증가 728×90 반응형 게시글을 클릭하면 조회수가 올라가도록 하는 글을 포스팅 하도록 하겠습니다. reviewMapper.xml update문으로 조회수(reCnt)를 1씩 증가시켜주도록 합니다. reviewmapper.java // 문의글 조회수 올리기 public int updatereviewcnt(String reNum); reviewService.java // 조회수 올리기 public int updatereviewcnt(String reNum) throws Exception { return reviewmapper.updatereviewcnt(reNum); } reviewController.java // 게시글 자세히보기 @RequestMapping(value=”/detailreview”) public ModelAndView detail(@RequestParam(“reNum”) String reNum) throws Exception { // 기존의 게시글 자세히 보기에서 추가된 부분 reviewservice.updatereviewcnt(reNum); return new ModelAndView(“detail”,”detail1″,reviewservice.detail(reNum)); } // 추가된 부분 // reviewservice.updatereviewcnt(reNum); 글을 누르기 전 글을 누른 후 728×90 반응형 조회수 추가, Oracle 컬럼 추가, default, null 설정 [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 TB_PROJECT SET VIEW_COUNT = VIEW_COUNT + 1 WHERE PRO_ID = #{proId} 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 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 스프링 게시판 만들기 – 7 (1) (조회수, 댓글 작성) 이전 스프링 게시판 만들기 – 6 에서 페이징 처리와 검색을 구현해보았다. 이번에는 간단하게 조회수를 올리는 기능과, 댓글 기능 을 구현해보려 한다. https://dodokong.tistory.com/54 조회수 증가 Board 도메인은 다음과 같다. 처음 설계에서는 countVisit 이 없었는데 조회수 기능을 넣기 위해 Long 타입으로 추가하였다. int, long 이 아닌 Long 타입을 쓰는 이유는 값이 설정되지 않는 경우, null 값을 넣기 위함이다. int, long 의 경우 기본형인 (Primitive Type)이기 때문에 값이 없는 경우 0 이 설정돼 있다. 이는 값이 들어간 것인지 혼란을 야기케 할 수 있다고 생각해서 참조형 변수(Reference Type) 을 사용하였다. 그 후, 하단부에 update 를 하기 위한 updateVisit 을 생성하였다. JPA 에서는 변경 감지와 병합 , 두가지로 update 를 할 수 있는데 병합의 경우 내가 입력하지 않은 값의 경우 값이 초기화되기 때문에 변경 감지를 사용해서 update 해야한다. (update 쿼리 사용 X. JPA 에서도 권장하지 않는 스펙. 자세한 내용은 다음 링크 참조!) https://dodokong.tistory.com/51 다음은 BoardService 에 update 를 구현하는 것이다. Controller 에서 id 를 넘겨주고, 해당 Id 가 없는 경우 Exception 을 통해 에러를 터뜨리고, 존재하는 ID 인 경우 방금 위에서 만들었던 updateVisit 을 호출해서 조회수를 업데이트 해준다. @PathVariable 을 통해 id 값에 따라 페이지 URL 이 설정되도록 하였고, 만약 1번 게시글을 클릭하는 경우 다음과 같이 URL 이 이동됨을 확인할 수 있다. @GetMapping 이므로 해당 게시글을 조회할 때마다 아래의 코드가 호출되는데, 하단의 model.addAttribute 의 경우 프론트 단에서 해당하는 데이터를 보여주기 위해서 작성한 코드이다. 게시글의 경우, 현재 내가 클릭한 게시글의 번호(id)를 이용해서 해당하는 board 를 찾고, 그 board 의 countVisit(조회수)의 값을 가져온다. 방문할 때마다 조회수를 +1 씩 증가시키고, 증가시킨 값을 dto 에 담아서 updateVisit 에 반환한다. 그렇게 되면 boardService 에서 검증한 뒤, 값을 update 시켜준다. 따로 update 쿼리를 작성하지 않고 영속 엔티티로 존재하는 값을 변경시켜서(더티체킹을 통해) 조회수를 늘려주었다는 부분이 중요한 부분이라고 생각된다. 조회수가 증가! 댓글 간단하게 댓글 기능을 구현하기 위해 새로운 테이블을 추가하였다. BoardComment 테이블을 생성하였고, 내용, 작성일, 작성자, 추후 댓글 삭제 기능을 위해 delete_check 을 넣어서 삭제 버튼을 누를 시, delete_check 를 ‘Y’ 로 바꾸고 삭제를 시키는 기능 등을 구현해 보려 한다. 우선은 간단하게 댓글만 구현해보도록 하겠다. boardContent.html 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 < !DOCTYPE html > < html xmlns:th = "http://www.thymeleaf.org" xmlns:sec = "http://www.thymeleaf.org/extras/spring-security" > < head > < title > < / title > < meta charset = "utf-8" > < meta name = "viewport" content = "width=device-width, initial-scale=1" > < link rel = "stylesheet" href = "https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css" > < script src = "https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js" > < / script > < script src = "https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.16.0/umd/popper.min.js" > < / script > < script src = "https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js" > < / script > < link rel = "stylesheet" type = "text/css" href = "https://cdn.datatables.net/1.10.22/css/jquery.dataTables.css" > < script type = "text/javascript" charset = "utf8" src = "https://cdn.datatables.net/1.10.22/js/jquery.dataTables.js" > < / script > < link href = "static/css/bootstrap.min.css" rel = "stylesheet" > < style > .fakeimg { height : 200px ; background : #aaa ; } < / style > < link href = "static/css/headers.css" rel = "stylesheet" > < / head > < body > < header class = "p-3 bg-dark text-white" > < div class = "container" > < div class = "d-flex flex-wrap align-items-center justify-content-center justify-content-lg-start" > < a href = "/" class = "d-flex align-items-center mb-2 mb-lg-0 text-white text-decoration-none" > < svg class = "bi me-2" width = "40" height = "32" role = "img" aria-label = "Bootstrap" > < use xlink:href = "#bootstrap" / > < / svg > < / a > < ul class = "nav col-12 col-lg-auto me-lg-auto mb-2 justify-content-center mb-md-0" > < li > < a href = "#" class = "nav-link px-2 text-secondary" > Home < / a > < / li > < li > < a href = "#" class = "nav-link px-2 text-white" > Board < / a > < / li > < li > < a href = "#" class = "nav-link px-2 text-white" > Pricing < / a > < / li > < li > < a href = "#" class = "nav-link px-2 text-white" > FAQs < / a > < / li > < li > < a href = "#" class = "nav-link px-2 text-white" > About < / a > < / li > < / ul > < form class = "col-12 col-lg-auto mb-3 mb-lg-0 me-lg-3" > < input type = "search" class = "form-control form-control-dark" placeholder = "Search..." aria-label = "Search" > < / form > < div class = "text-end" > < button type = "button" class = "btn btn-outline-light me-2" onclick = "moveLogin();" > Login < / button > < button type = "button" class = "btn btn-warning" onclick = "moveJoin();" > Sign-up < / button > < / div > < / div > < / div > < / header > < div class = "container" style = "margin-top:30px" > < div class = "row" > < div class = "col-sm-12" > < div class = "form-group" > < h5 th:text = "'제목 : ' + ${board.title}" > < / h5 > < / div > < div > < td th:text = "'작성자 : ' + ${board.createdBy}" > < / td > < br > < br > < / div > < h5 > 내용 < / h5 > < div style = "border:1px solid; padding:10px;" > < dl > < dd th:text = "${board.content}" > < / dd > < / dl > < / div > < / div > < / div > < / div > < form action = "boardContent.html" th:action method = "post" > < div class = "comment-form" style = "text-align: center;" > < div class = "comment-form2" style = "width:300px;height: 200px;display: inline-block" > < label for = "content" > 댓글 달기 < / label > < textarea class = "form-control" id = "content" name = "content" rows = "3" > < / textarea > < button type = "submit" class = "btn btn-primary" onclick = "window.location.reload()" > 작성 < / button > < / div > < / div > < / form > < div class = "container" > < table class = "table table-hover" > < tr > < th > 번호 < / th > < th > 작성자 < / th > < th > 내용 < / th > < / tr > < / thead > < tbody > < tr th:each = "comment : ${comments}" > < td th:text = "${comment.id}" > < / td > < td th:text = "${comment.created_by}" > < / td > ss < td th:text = "${comment.content}" > < / td > < / tr > < / tbody > < / table > < / div > < / body > < / html > Colored by Color Scripter cs 74 – 99 번째 줄까지가 댓글을 구현하기 위한 기본 UI 와 출력하기 위해 Thymeleaf 로 작성한 코드이다. 이전의 코드들과 동일하게 comments 를 model 에 담아서 List 형태로 넘겨주면 th:each 를 통해 하나씩 출력하는 방식이다. BoardComment 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 package toyproject.board.domain; import lombok.AccessLevel; import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; import javax.persistence. * ; import java.time.LocalDateTime; import java.util.List; @Entity @Table(name = “board_comment” ) @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) public class BoardComment { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = “board_comment_id” ) private Long id; private String content; private LocalDateTime created_date; private String created_by; private Character delete_check; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = “member_id” ) private Board board; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = “board_id” ) private Member member; @Builder public BoardComment( String content, LocalDateTime created_date, String created_by, Character delete_check, Board board, Member member) { this .content = content; this .created_date = created_date; this .created_by = created_by; this .delete_check = delete_check; if ( this .board ! = null ){ board.getBoardCommentList().remove( this ); } else this .board = board; if ( this .member ! = null ){ member.getBoardCommentList().remove( this ); } else this .member = member; } } Colored by Color Scripter cs 위 테이블에서 설계한 대로 작성하고, 연관관계 매핑을 해주었다. Dto 에는 dto 를 BoardComment 타입으로 받기 위해 toEntity 만 추가 선언하였다. Repository 를 추가하여 내가 작성한 board.id 에 해당하는 댓글만 출력할 수 있는 쿼리문을 작성하였다. ( 3번 게시글을 클릭하면 3번에 대한 댓글만 출력) Controller 게시글을 작성하는 부분과 달라지는 부분들이 크게 없다. 계속해서 응용만 할뿐!.. 똑같이 로그인한 유저정보를 받아와서 해당 유저정보를 작성자에 넣고, 엔티티 값을 넣은 뒤, model 에 담아서 반환한다. 테스트를 진행하던 중, 계속 1번 댓글의 값이 출력이 안되고 2번 부터 출력됐던 문제가 있었는데 단순히 List comment = boardCommentRepository.findCommentBoardId(id); 부분을 마지막이 아닌 코드의 초반부에 적어서 문제가 생겼었다. 데이터가 전부 담긴 뒤, 보내줘야 하는데 데이터를 먼저 보내주고 save 를 하니 이런 문제가!.. 쓸까 말까 하던 단순한 오류였지만 나중에 똑같은 실수를 하지 않기 위해서!.. 결과 사담 열심히 해보려 하긴 하는데.. 음.. Sketcher 프로젝트에서 처럼 뭔가 음.. 엉성한 코드임이 느껴진다. 대충 굴러가기만 하는 코드인 느낌! 고수 개발자분들의 아~ 이런 부분은 이렇게 작성하셔야 좋은 코드에요~ 하고 아는 방법을 알고 싶다.. 당분간은 Sketcher 프로젝트에서 테스트 코드 작성과 코드 리팩토링 + 중간고사 준비로 인해 개인 프로젝트는 잠시 뒤로 미뤄놔야 할 것 같다!.. 한창 재밌게 하는 중이였는데 조금 아쉽다! 다음에 돌아오면 인프라 세팅을 하고 배포를 해보는 작업을 해볼까 한다! (아마도!..) 다음 편! So you have finished reading the 게시판 조회수 올리기 topic article, if you find this article useful, please share it. Thank you very much. See more: 게시글 조회수 올리기, 게시판 조회수 중복 방지, Ajax 조회수 증가, MVC 게시판 조회수, 스프링 게시판 조회수 중복, 스프링부트 조회수 증가, 게시판 조회수 구현, 게시판 조회수 카운트

스프링 게시판 만들기 – 7 (1) (조회수, 댓글 작성)

이전 스프링 게시판 만들기 – 6 에서 페이징 처리와 검색을 구현해보았다. 이번에는 간단하게 조회수를 올리는 기능과, 댓글 기능 을 구현해보려 한다. https://dodokong.tistory.com/54 조회수 증가 Board 도메인은 다음과 같다. 처음 설계에서는 countVisit 이 없었는데 조회수 기능을 넣기 위해 Long 타입으로 추가하였다. int, long 이 아닌 Long 타입을 쓰는 이유는 값이 설정되지 않는 경우, null 값을 넣기 위함이다. int, long 의 경우 기본형인 (Primitive Type)이기 때문에 값이 없는 경우 0 이 설정돼 있다. 이는 값이 들어간 것인지 혼란을 야기케 할 수 있다고 생각해서 참조형 변수(Reference Type) 을 사용하였다. 그 후, 하단부에 update 를 하기 위한 updateVisit 을 생성하였다. JPA 에서는 변경 감지와 병합 , 두가지로 update 를 할 수 있는데 병합의 경우 내가 입력하지 않은 값의 경우 값이 초기화되기 때문에 변경 감지를 사용해서 update 해야한다. (update 쿼리 사용 X. JPA 에서도 권장하지 않는 스펙. 자세한 내용은 다음 링크 참조!) https://dodokong.tistory.com/51 다음은 BoardService 에 update 를 구현하는 것이다. Controller 에서 id 를 넘겨주고, 해당 Id 가 없는 경우 Exception 을 통해 에러를 터뜨리고, 존재하는 ID 인 경우 방금 위에서 만들었던 updateVisit 을 호출해서 조회수를 업데이트 해준다. @PathVariable 을 통해 id 값에 따라 페이지 URL 이 설정되도록 하였고, 만약 1번 게시글을 클릭하는 경우 다음과 같이 URL 이 이동됨을 확인할 수 있다. @GetMapping 이므로 해당 게시글을 조회할 때마다 아래의 코드가 호출되는데, 하단의 model.addAttribute 의 경우 프론트 단에서 해당하는 데이터를 보여주기 위해서 작성한 코드이다. 게시글의 경우, 현재 내가 클릭한 게시글의 번호(id)를 이용해서 해당하는 board 를 찾고, 그 board 의 countVisit(조회수)의 값을 가져온다. 방문할 때마다 조회수를 +1 씩 증가시키고, 증가시킨 값을 dto 에 담아서 updateVisit 에 반환한다. 그렇게 되면 boardService 에서 검증한 뒤, 값을 update 시켜준다. 따로 update 쿼리를 작성하지 않고 영속 엔티티로 존재하는 값을 변경시켜서(더티체킹을 통해) 조회수를 늘려주었다는 부분이 중요한 부분이라고 생각된다. 조회수가 증가! 댓글 간단하게 댓글 기능을 구현하기 위해 새로운 테이블을 추가하였다. BoardComment 테이블을 생성하였고, 내용, 작성일, 작성자, 추후 댓글 삭제 기능을 위해 delete_check 을 넣어서 삭제 버튼을 누를 시, delete_check 를 ‘Y’ 로 바꾸고 삭제를 시키는 기능 등을 구현해 보려 한다. 우선은 간단하게 댓글만 구현해보도록 하겠다. boardContent.html 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 < !DOCTYPE html > < html xmlns:th = "http://www.thymeleaf.org" xmlns:sec = "http://www.thymeleaf.org/extras/spring-security" > < head > < title > < / title > < meta charset = "utf-8" > < meta name = "viewport" content = "width=device-width, initial-scale=1" > < link rel = "stylesheet" href = "https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css" > < script src = "https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js" > < / script > < script src = "https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.16.0/umd/popper.min.js" > < / script > < script src = "https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js" > < / script > < link rel = "stylesheet" type = "text/css" href = "https://cdn.datatables.net/1.10.22/css/jquery.dataTables.css" > < script type = "text/javascript" charset = "utf8" src = "https://cdn.datatables.net/1.10.22/js/jquery.dataTables.js" > < / script > < link href = "static/css/bootstrap.min.css" rel = "stylesheet" > < style > .fakeimg { height : 200px ; background : #aaa ; } < / style > < link href = "static/css/headers.css" rel = "stylesheet" > < / head > < body > < header class = "p-3 bg-dark text-white" > < div class = "container" > < div class = "d-flex flex-wrap align-items-center justify-content-center justify-content-lg-start" > < a href = "/" class = "d-flex align-items-center mb-2 mb-lg-0 text-white text-decoration-none" > < svg class = "bi me-2" width = "40" height = "32" role = "img" aria-label = "Bootstrap" > < use xlink:href = "#bootstrap" / > < / svg > < / a > < ul class = "nav col-12 col-lg-auto me-lg-auto mb-2 justify-content-center mb-md-0" > < li > < a href = "#" class = "nav-link px-2 text-secondary" > Home < / a > < / li > < li > < a href = "#" class = "nav-link px-2 text-white" > Board < / a > < / li > < li > < a href = "#" class = "nav-link px-2 text-white" > Pricing < / a > < / li > < li > < a href = "#" class = "nav-link px-2 text-white" > FAQs < / a > < / li > < li > < a href = "#" class = "nav-link px-2 text-white" > About < / a > < / li > < / ul > < form class = "col-12 col-lg-auto mb-3 mb-lg-0 me-lg-3" > < input type = "search" class = "form-control form-control-dark" placeholder = "Search..." aria-label = "Search" > < / form > < div class = "text-end" > < button type = "button" class = "btn btn-outline-light me-2" onclick = "moveLogin();" > Login < / button > < button type = "button" class = "btn btn-warning" onclick = "moveJoin();" > Sign-up < / button > < / div > < / div > < / div > < / header > < div class = "container" style = "margin-top:30px" > < div class = "row" > < div class = "col-sm-12" > < div class = "form-group" > < h5 th:text = "'제목 : ' + ${board.title}" > < / h5 > < / div > < div > < td th:text = "'작성자 : ' + ${board.createdBy}" > < / td > < br > < br > < / div > < h5 > 내용 < / h5 > < div style = "border:1px solid; padding:10px;" > < dl > < dd th:text = "${board.content}" > < / dd > < / dl > < / div > < / div > < / div > < / div > < form action = "boardContent.html" th:action method = "post" > < div class = "comment-form" style = "text-align: center;" > < div class = "comment-form2" style = "width:300px;height: 200px;display: inline-block" > < label for = "content" > 댓글 달기 < / label > < textarea class = "form-control" id = "content" name = "content" rows = "3" > < / textarea > < button type = "submit" class = "btn btn-primary" onclick = "window.location.reload()" > 작성 < / button > < / div > < / div > < / form > < div class = "container" > < table class = "table table-hover" > < tr > < th > 번호 < / th > < th > 작성자 < / th > < th > 내용 < / th > < / tr > < / thead > < tbody > < tr th:each = "comment : ${comments}" > < td th:text = "${comment.id}" > < / td > < td th:text = "${comment.created_by}" > < / td > ss < td th:text = "${comment.content}" > < / td > < / tr > < / tbody > < / table > < / div > < / body > < / html > Colored by Color Scripter cs 74 – 99 번째 줄까지가 댓글을 구현하기 위한 기본 UI 와 출력하기 위해 Thymeleaf 로 작성한 코드이다. 이전의 코드들과 동일하게 comments 를 model 에 담아서 List 형태로 넘겨주면 th:each 를 통해 하나씩 출력하는 방식이다. BoardComment 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 package toyproject.board.domain; import lombok.AccessLevel; import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; import javax.persistence. * ; import java.time.LocalDateTime; import java.util.List; @Entity @Table(name = “board_comment” ) @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) public class BoardComment { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = “board_comment_id” ) private Long id; private String content; private LocalDateTime created_date; private String created_by; private Character delete_check; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = “member_id” ) private Board board; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = “board_id” ) private Member member; @Builder public BoardComment( String content, LocalDateTime created_date, String created_by, Character delete_check, Board board, Member member) { this .content = content; this .created_date = created_date; this .created_by = created_by; this .delete_check = delete_check; if ( this .board ! = null ){ board.getBoardCommentList().remove( this ); } else this .board = board; if ( this .member ! = null ){ member.getBoardCommentList().remove( this ); } else this .member = member; } } Colored by Color Scripter cs 위 테이블에서 설계한 대로 작성하고, 연관관계 매핑을 해주었다. Dto 에는 dto 를 BoardComment 타입으로 받기 위해 toEntity 만 추가 선언하였다. Repository 를 추가하여 내가 작성한 board.id 에 해당하는 댓글만 출력할 수 있는 쿼리문을 작성하였다. ( 3번 게시글을 클릭하면 3번에 대한 댓글만 출력) Controller 게시글을 작성하는 부분과 달라지는 부분들이 크게 없다. 계속해서 응용만 할뿐!.. 똑같이 로그인한 유저정보를 받아와서 해당 유저정보를 작성자에 넣고, 엔티티 값을 넣은 뒤, model 에 담아서 반환한다. 테스트를 진행하던 중, 계속 1번 댓글의 값이 출력이 안되고 2번 부터 출력됐던 문제가 있었는데 단순히 List comment = boardCommentRepository.findCommentBoardId(id); 부분을 마지막이 아닌 코드의 초반부에 적어서 문제가 생겼었다. 데이터가 전부 담긴 뒤, 보내줘야 하는데 데이터를 먼저 보내주고 save 를 하니 이런 문제가!.. 쓸까 말까 하던 단순한 오류였지만 나중에 똑같은 실수를 하지 않기 위해서!.. 결과 사담 열심히 해보려 하긴 하는데.. 음.. Sketcher 프로젝트에서 처럼 뭔가 음.. 엉성한 코드임이 느껴진다. 대충 굴러가기만 하는 코드인 느낌! 고수 개발자분들의 아~ 이런 부분은 이렇게 작성하셔야 좋은 코드에요~ 하고 아는 방법을 알고 싶다.. 당분간은 Sketcher 프로젝트에서 테스트 코드 작성과 코드 리팩토링 + 중간고사 준비로 인해 개인 프로젝트는 잠시 뒤로 미뤄놔야 할 것 같다!.. 한창 재밌게 하는 중이였는데 조금 아쉽다! 다음에 돌아오면 인프라 세팅을 하고 배포를 해보는 작업을 해볼까 한다! (아마도!..) 다음 편!

[테크노트 CGI] 게시판 조회수 올리는 방법 > 기술자료

본문 글 조회수 카운타를, 동일인이라도 본문 열때마다 카운트 올라가게 하려면 read.cgi 에서 return if($COOKIE{‘ReadTxtChEck’} =~ /|$readline[1]|/); 위 코드를 찾아 지워 버리면 됩니다. 출처 : 테크노트 2002 Q/A

키워드에 대한 정보 게시판 조회수 올리기

다음은 Bing에서 게시판 조회수 올리기 주제에 대한 검색 결과입니다. 필요한 경우 더 읽을 수 있습니다.

이 기사는 인터넷의 다양한 출처에서 편집되었습니다. 이 기사가 유용했기를 바랍니다. 이 기사가 유용하다고 생각되면 공유하십시오. 매우 감사합니다!

사람들이 주제에 대해 자주 검색하는 키워드 [다중,멀티 게시판 만들기] 14 – 조회수 하루에 1번만 올리기

서기

php

동영상강의

다중

멀티

게시판

만들기

bbs

board

multi

[다중,멀티 #게시판 #만들기] #14 #- #조회수 #하루에 #1번만 #올리기

YouTube에서 게시판 조회수 올리기 주제의 다른 동영상 보기

주제에 대한 기사를 시청해 주셔서 감사합니다 [다중,멀티 게시판 만들기] 14 – 조회수 하루에 1번만 올리기 | 게시판 조회수 올리기, 이 기사가 유용하다고 생각되면 공유하십시오, 매우 감사합니다.

[테크노트 CGI] 게시판 조회수 올리는 방법 > 기술자료

본문

글 조회수 카운타를, 동일인이라도 본문 열때마다 카운트 올라가게 하려면 read.cgi 에서

return if($COOKIE{‘ReadTxtChEck’} =~ /|$readline[1]|/);

위 코드를 찾아 지워 버리면 됩니다.

출처 : 테크노트 2002 Q/A

스프링 게시판 만들기 – 7 (1) (조회수, 댓글 작성)

이전 스프링 게시판 만들기 – 6 에서 페이징 처리와 검색을 구현해보았다.

이번에는 간단하게 조회수를 올리는 기능과, 댓글 기능

을 구현해보려 한다.

https://dodokong.tistory.com/54

조회수 증가

Board 도메인은 다음과 같다. 처음 설계에서는 countVisit 이 없었는데 조회수 기능을 넣기 위해

Long 타입으로 추가하였다.

int, long 이 아닌 Long 타입을 쓰는 이유는

값이 설정되지 않는 경우, null 값을 넣기 위함이다.

int, long 의 경우 기본형인 (Primitive Type)이기 때문에 값이 없는 경우 0 이 설정돼 있다.

이는 값이 들어간 것인지 혼란을 야기케 할 수 있다고 생각해서 참조형 변수(Reference Type) 을 사용하였다.

그 후, 하단부에 update 를 하기 위한 updateVisit 을 생성하였다.

JPA 에서는 변경 감지와 병합 , 두가지로 update 를 할 수 있는데 병합의 경우

내가 입력하지 않은 값의 경우 값이 초기화되기 때문에 변경 감지를 사용해서 update 해야한다.

(update 쿼리 사용 X. JPA 에서도 권장하지 않는 스펙. 자세한 내용은 다음 링크 참조!)

https://dodokong.tistory.com/51

다음은 BoardService 에 update 를 구현하는 것이다.

Controller 에서 id 를 넘겨주고, 해당 Id 가 없는 경우 Exception 을 통해 에러를 터뜨리고,

존재하는 ID 인 경우 방금 위에서 만들었던 updateVisit 을 호출해서 조회수를 업데이트 해준다.

@PathVariable 을 통해 id 값에 따라 페이지 URL 이 설정되도록 하였고, 만약 1번 게시글을 클릭하는 경우

다음과 같이 URL 이 이동됨을 확인할 수 있다.

@GetMapping 이므로 해당 게시글을 조회할 때마다 아래의 코드가 호출되는데,

하단의 model.addAttribute 의 경우 프론트 단에서 해당하는 데이터를 보여주기 위해서 작성한 코드이다.

게시글의 경우, 현재 내가 클릭한 게시글의 번호(id)를 이용해서 해당하는 board 를 찾고,

그 board 의 countVisit(조회수)의 값을 가져온다.

방문할 때마다 조회수를 +1 씩 증가시키고, 증가시킨 값을 dto 에 담아서 updateVisit 에 반환한다.

그렇게 되면 boardService 에서 검증한 뒤, 값을 update 시켜준다.

따로 update 쿼리를 작성하지 않고 영속 엔티티로 존재하는 값을 변경시켜서(더티체킹을 통해)

조회수를 늘려주었다는 부분이 중요한 부분이라고 생각된다.

조회수가 증가!

댓글

간단하게 댓글 기능을 구현하기 위해 새로운 테이블을 추가하였다.

BoardComment 테이블을 생성하였고, 내용, 작성일, 작성자, 추후 댓글 삭제 기능을 위해

delete_check 을 넣어서 삭제 버튼을 누를 시, delete_check 를 ‘Y’ 로 바꾸고 삭제를 시키는

기능 등을 구현해 보려 한다.

우선은 간단하게 댓글만 구현해보도록 하겠다.

boardContent.html

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 < !DOCTYPE html > < html xmlns:th = "http://www.thymeleaf.org" xmlns:sec = "http://www.thymeleaf.org/extras/spring-security" > < head > < title > < / title > < meta charset = "utf-8" > < meta name = "viewport" content = "width=device-width, initial-scale=1" > < link rel = "stylesheet" href = "https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css" > < script src = "https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js" > < / script > < script src = "https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.16.0/umd/popper.min.js" > < / script > < script src = "https://maxcdn.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js" > < / script > < link rel = "stylesheet" type = "text/css" href = "https://cdn.datatables.net/1.10.22/css/jquery.dataTables.css" > < script type = "text/javascript" charset = "utf8" src = "https://cdn.datatables.net/1.10.22/js/jquery.dataTables.js" > < / script > < link href = "static/css/bootstrap.min.css" rel = "stylesheet" > < style > .fakeimg { height : 200px ; background : #aaa ; } < / style > < link href = "static/css/headers.css" rel = "stylesheet" > < / head > < body > < header class = "p-3 bg-dark text-white" > < div class = "container" > < div class = "d-flex flex-wrap align-items-center justify-content-center justify-content-lg-start" > < a href = "/" class = "d-flex align-items-center mb-2 mb-lg-0 text-white text-decoration-none" > < svg class = "bi me-2" width = "40" height = "32" role = "img" aria-label = "Bootstrap" > < use xlink:href = "#bootstrap" / > < / svg > < / a > < ul class = "nav col-12 col-lg-auto me-lg-auto mb-2 justify-content-center mb-md-0" > < li > < a href = "#" class = "nav-link px-2 text-secondary" > Home < / a > < / li > < li > < a href = "#" class = "nav-link px-2 text-white" > Board < / a > < / li > < li > < a href = "#" class = "nav-link px-2 text-white" > Pricing < / a > < / li > < li > < a href = "#" class = "nav-link px-2 text-white" > FAQs < / a > < / li > < li > < a href = "#" class = "nav-link px-2 text-white" > About < / a > < / li > < / ul > < form class = "col-12 col-lg-auto mb-3 mb-lg-0 me-lg-3" > < input type = "search" class = "form-control form-control-dark" placeholder = "Search..." aria-label = "Search" > < / form > < div class = "text-end" > < button type = "button" class = "btn btn-outline-light me-2" onclick = "moveLogin();" > Login < / button > < button type = "button" class = "btn btn-warning" onclick = "moveJoin();" > Sign-up < / button > < / div > < / div > < / div > < / header > < div class = "container" style = "margin-top:30px" > < div class = "row" > < div class = "col-sm-12" > < div class = "form-group" > < h5 th:text = "'제목 : ' + ${board.title}" > < / h5 > < / div > < div > < td th:text = "'작성자 : ' + ${board.createdBy}" > < / td > < br > < br > < / div > < h5 > 내용 < / h5 > < div style = "border:1px solid; padding:10px;" > < dl > < dd th:text = "${board.content}" > < / dd > < / dl > < / div > < / div > < / div > < / div > < form action = "boardContent.html" th:action method = "post" > < div class = "comment-form" style = "text-align: center;" > < div class = "comment-form2" style = "width:300px;height: 200px;display: inline-block" > < label for = "content" > 댓글 달기 < / label > < textarea class = "form-control" id = "content" name = "content" rows = "3" > < / textarea > < button type = "submit" class = "btn btn-primary" onclick = "window.location.reload()" > 작성 < / button > < / div > < / div > < / form > < div class = "container" > < table class = "table table-hover" > < tr > < th > 번호 < / th > < th > 작성자 < / th > < th > 내용 < / th > < / tr > < / thead > < tbody > < tr th:each = "comment : ${comments}" > < td th:text = "${comment.id}" > < / td > < td th:text = "${comment.created_by}" > < / td > ss < td th:text = "${comment.content}" > < / td > < / tr > < / tbody > < / table > < / div > < / body > < / html > Colored by Color Scripter cs

74 – 99 번째 줄까지가 댓글을 구현하기 위한 기본 UI 와 출력하기 위해

Thymeleaf 로 작성한 코드이다. 이전의 코드들과 동일하게 comments 를 model 에 담아서

List 형태로 넘겨주면 th:each 를 통해 하나씩 출력하는 방식이다.

BoardComment

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 package toyproject.board.domain; import lombok.AccessLevel; import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; import javax.persistence. * ; import java.time.LocalDateTime; import java.util.List; @Entity @Table(name = “board_comment” ) @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) public class BoardComment { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = “board_comment_id” ) private Long id; private String content; private LocalDateTime created_date; private String created_by; private Character delete_check; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = “member_id” ) private Board board; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = “board_id” ) private Member member; @Builder public BoardComment( String content, LocalDateTime created_date, String created_by, Character delete_check, Board board, Member member) { this .content = content; this .created_date = created_date; this .created_by = created_by; this .delete_check = delete_check; if ( this .board ! = null ){ board.getBoardCommentList().remove( this ); } else this .board = board; if ( this .member ! = null ){ member.getBoardCommentList().remove( this ); } else this .member = member; } } Colored by Color Scripter cs

위 테이블에서 설계한 대로 작성하고, 연관관계 매핑을 해주었다.

Dto 에는 dto 를 BoardComment 타입으로 받기 위해 toEntity 만 추가 선언하였다.

Repository 를 추가하여 내가 작성한 board.id 에 해당하는 댓글만 출력할 수 있는 쿼리문을

작성하였다. ( 3번 게시글을 클릭하면 3번에 대한 댓글만 출력)

Controller

게시글을 작성하는 부분과 달라지는 부분들이 크게 없다. 계속해서 응용만 할뿐!..

똑같이 로그인한 유저정보를 받아와서 해당 유저정보를 작성자에 넣고,

엔티티 값을 넣은 뒤, model 에 담아서 반환한다.

테스트를 진행하던 중, 계속 1번 댓글의 값이 출력이 안되고 2번 부터 출력됐던 문제가 있었는데

단순히 List comment = boardCommentRepository.findCommentBoardId(id); 부분을

마지막이 아닌 코드의 초반부에 적어서 문제가 생겼었다.

데이터가 전부 담긴 뒤, 보내줘야 하는데 데이터를 먼저 보내주고 save 를 하니 이런 문제가!..

쓸까 말까 하던 단순한 오류였지만 나중에 똑같은 실수를 하지 않기 위해서!..

결과

사담

열심히 해보려 하긴 하는데.. 음.. Sketcher 프로젝트에서 처럼

뭔가 음.. 엉성한 코드임이 느껴진다. 대충 굴러가기만 하는 코드인 느낌!

고수 개발자분들의 아~ 이런 부분은 이렇게 작성하셔야 좋은 코드에요~

하고 아는 방법을 알고 싶다..

당분간은 Sketcher 프로젝트에서 테스트 코드 작성과 코드 리팩토링 + 중간고사 준비로 인해

개인 프로젝트는 잠시 뒤로 미뤄놔야 할 것 같다!..

한창 재밌게 하는 중이였는데 조금 아쉽다!

다음에 돌아오면 인프라 세팅을 하고 배포를 해보는 작업을 해볼까 한다! (아마도!..)

다음 편!

키워드에 대한 정보 게시판 조회수 올리기

다음은 Bing에서 게시판 조회수 올리기 주제에 대한 검색 결과입니다. 필요한 경우 더 읽을 수 있습니다.

이 기사는 인터넷의 다양한 출처에서 편집되었습니다. 이 기사가 유용했기를 바랍니다. 이 기사가 유용하다고 생각되면 공유하십시오. 매우 감사합니다!

사람들이 주제에 대해 자주 검색하는 키워드 [다중,멀티 게시판 만들기] 14 – 조회수 하루에 1번만 올리기

  • 서기
  • php
  • 동영상강의
  • 다중
  • 멀티
  • 게시판
  • 만들기
  • bbs
  • board
  • multi
[다중,멀티 #게시판 #만들기] #14 #- #조회수 #하루에 #1번만 #올리기


YouTube에서 게시판 조회수 올리기 주제의 다른 동영상 보기

주제에 대한 기사를 시청해 주셔서 감사합니다 [다중,멀티 게시판 만들기] 14 – 조회수 하루에 1번만 올리기 | 게시판 조회수 올리기, 이 기사가 유용하다고 생각되면 공유하십시오, 매우 감사합니다.

See also  베트남 한인 영화 | [베트남 단편 영화/자막포함] Cậu Có Phục Vụ Tại Bàn Không? 408 개의 새로운 답변이 업데이트되었습니다.

Leave a Comment