본문 바로가기
수업 일지/Spring

69일차 - [Spring] 게시판 기능 구현2

by 쿠쿠씨 2022. 4. 15.
반응형
	<update id="update" parameterType="Freeboard">
		UPDATE freeboard SET content=#{content},subject=CONCAT('(수정)',subject ),
		wdate=sysdate WHERE idx=#{idx}
	</update>

작성한 글 수정하기

글 상세 내용 페이지에서 수정 버튼을 누르면 

1) 글을 입력할 수 있는 textarea를 출력합니다.

2) 버튼은 수정/삭제/목록 에서 저장/취소/목록 버튼으로 변경됩니다.

3) 수정된 글의 제목의 앞에는 '(수정)' 텍스트를 추가합니다.

Mapper 인터페이스

void update(Freeboard dto);

 

XML 매퍼 파일

	<update id="update" parameterType="Freeboard">
		UPDATE freeboard SET content=#{content},subject=CONCAT('(수정)',subject ),
		wdate=sysdate WHERE idx=#{idx}
	</update>

CONCAT 함수로 수정된 글에 '(수정)' 텍스트를 추가합니다.

 

Controller

 

View

 

작성한 글 삭제하기

 

 

댓글 기능 구현하기

댓글 테이블 comments를 생성합니다.

CREATE TABLE comments (
	idx number(3) NOT NULL,		--댓글 테이블의 기본키
	"ref" number(5) NOT NULL,	--freeboard 테이블의 idx
	name varchar2(30) NOT NULL,
	content varchar2(2000) NOT NULL,
	wdate DATE DEFAULT sysdate,
	ip varchar2(15) DEFAULT '127.0.0.1',
	heart number(3) DEFAULT '0',
	PRIMARY KEY(idx)
);

 

--시퀀스 생성
CREATE SEQUENCE cmt_idx_seq;

--데이터 추가(댓글 작성)
INSERT INTO comments(idx,"ref",name,content)
VALUES (cmt_idx_seq.nextval,3,'이하니','확인했습니다.!!');

--freeboard 테이블의 댓글 개수
--1) 댓글 작성될 때마다 +1 	2) 댓글 개수를 구하는 SELECT 
SELECT count(*) FROM comments WHERE "ref"=3;	--freeboard 3번 글의 댓글 개수
SELECT count(*) FROM comments WHERE "ref"=1;	--freeboard 1번 글의 댓글 개수

--1) 로 구현할 예정 : insert into comments > update freeboard set commentCount=commentCount+1

 

 

 

 

* ip 설정 바꾸기

ipv6 출력을 ipv4로 바꿉니다.

[Run] - [Run Configurations]을 선택합니다.

 

VMware 서버를 선택하고 [Arguments] 탭에서 VM arguments:에 텍스트를 추가합니다.

-Djava.net.preferIPv4Stack=true

 

* 프로젝트 대비 임시 로그인

public class TestLoginController {
	private static final Logger logger = LoggerFactory.getLogger(TestLoginController.class);
	
	//로그인과 같은 동작을 하는 테스트용입니다. (post 방식이어야 합니다.)
	@RequestMapping("login")
		public String login(HttpServletRequest request) {
			HttpSession session = request.getSession();
			session.setAttribute("user", new Member(0, "모모", null, "momo@naver.com"));
			
			return "redirect:/";
	}
	
	@RequestMapping("admin")	//관리자 로그인
	public String admin(HttpSession session) {
		session.setAttribute("admin", new Administrator("root",1));
		
		return "redirect:/";
	}
	@RequestMapping("logout")
	public String logout(HttpSession session) {
		session.invalidate();
		return "redirect:/";
	}

 

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Administrator {
	private String adminId;
	private int level;
}

 

<h3>일반 사용자 : 고객님.</h3>
<c:if test="${user!=null}"><!-- 로그인 했을 때 메뉴 -->
	<a href="logout">로그아웃</a>
	<br>${sessionScope.user.name }님 환영합니다.
</c:if>
<c:if test="${user==null}"><!-- 로그인 안 했을 때 메뉴 -->
	<a href="login">고객님 로그인</a>
</c:if>
<hr>
<!-- 관리자 메뉴 : 나중에 별도로 페이지를 만듭니다. -->
<h3>관리자</h3>
<c:if test="${admin!=null}"><!-- 관리자 로그인 했을 때 메뉴 -->
	<a href="logout">로그아웃</a>
	<br>${admin.adminId }님 환영합니다.
</c:if>
<c:if test="${admin==null}">
	<a href="admin">관리자 로그인</a>
</c:if>

※ home.jsp에 위에 있는 <%@ page session="false" %> 를 지워야 session 객체를 사용할 수 있습니다.

 

고객 로그인 버튼 클릭 전 후

반응형

댓글