YJ의 새벽

Spring 19 ( 댓글 , 대댓글 삽입,수정,삭제 ) 본문

Spring/Spring

Spring 19 ( 댓글 , 대댓글 삽입,수정,삭제 )

YJDawn 2023. 5. 10. 16:50

 

 

 

--- 댓글 테이블을 살펴보자.

 -- 이상태로 목록을 뽑아가면 , 댓글,대댓글 정렬이 아니라, DB 순서대로 정렬이 된다.

  -- 댓글과 대댓글 순서가 뒤죽박죽이다. 계층형쿼리로 만들어주자

 

 

  • 댓글 목록 조회 ( 계층형 구조 )

 

-- 상위 타입과 하위 타입간의 관계를 계층식으로 표현할 수 있게 하는 질의어 (SELECT)

-- START WITH   :  상위 타입(최상위 부모)  으로 사용될 행을 지정

-- CONNECT BY    :  상위타입과 하위타입 사이의 관계를 규정.   

                         PRIOR (이전의)  연산자과 같이 사용하여,  

                         현재행 이전에 상위타입, 또는 하위타입이 있을지 규정.

         부모 --> 자식 계층구조  :  CONNECT BY PRIOR  자식컬럼 = 부모컬럼 

         자식 --> 부모 계층구조  :  CONNECT BY PRIOR  부모커럼 = 자식컬럼

-- ORDER SIBLINGS BY   :   계층구조 정렬 .

 

***********계층형 쿼리가 적용된 SELECT 해석 순서 

5   SELECT                     

1   FROM   ( +JOIN)

4   WHERE

2   START WITH

3   CONNECT BY

6   ORDER SIBLINGS BY

 

 

 

 

 

 

 

 

 

 

---- 댓글리스트 먼저 뽑아보자 . ( ajax )            댓글 목록 보이기 !!!

 

 

--- js 를 참고하여 .  url data type  확인 후 

--- Controller 에서 맵핑.

--- Service 로 boardNo 담아서 전달 . 

--- DAO 에서 DB 접근.

---- reply-mapper.xml  파일

<mapper namespace="replyMapper">
	<!-- resultMap태그 -->
	<resultMap type="reply" id="reply_rm">
		<id property="replyNo" column="REPLY_NO"/>
		<result property="replyContent" column="REPLY_CONTENT"/>
		<result property="createDate" column="CREATE_DT"/>
		<result property="boardNo" column="BOARD_NO"/>
		<result property="memberNo" column="MEMBER_NO"/>
		<result property="memberNickname" column="MEMBER_NICK"/>
		<result property="profileImage" column="PROFILE_IMG"/>
		<result property="parentReplyNo" column="PARENT_REPLY_NO"/>
	</resultMap>
	
	<!-- 댓글목록뽑아오기 즉시실행 -->
	<select id="selectReplyList" resultMap="reply_rm">
		SELECT LEVEL,  R.* FROM
		    (SELECT REPLY_NO, REPLY_CONTENT,
		        TO_CHAR(CREATE_DT, 'YYYY"년" MM"월" DD"일" HH24"시" MI"분" SS"초"') CREATE_DT,
		        BOARD_NO, MEMBER_NO, MEMBER_NICK, PROFILE_IMG, PARENT_REPLY_NO, REPLY_ST
		    FROM REPLY_S
		    JOIN MEMBER_S USING(MEMBER_NO)
		    WHERE BOARD_NO = #{boardNo}) R	
		WHERE REPLY_ST = 'N'
		START WITH PARENT_REPLY_NO IS NULL
		CONNECT BY PRIOR REPLY_NO = PARENT_REPLY_NO
		ORDER SIBLINGS BY REPLY_NO
	</select>

 

 

 

 

 

 

 

--- 댓글 등록 눌렀을때,  추가 !!       댓글 삽입 !!! 

댓글등록

--- 댓글 삭제 눌렀을때,  삭제  !!       댓글 삭제 !!! 

댓글삭제

--- 댓글 수정 눌렀을때, 수정 !!       댓글 수정 !!! 

댓글 수정

 

--------- 댓글 등록 , 삭제, 수정  Controller

	// 댓글 등록 
	@PostMapping("/insert")
	public int insertReply( Reply reply ) {
		return replyService.insertReply(reply);
	}
	
	// 댓글 삭제
	@GetMapping("/delete")
	public int deleteReply(int replyNo) {
		return replyService.deleteReply(replyNo);
	}
	
	// 댓글 수정
	@PostMapping("/update")
	public int updateReply(int replyNo , String replyContent) {
		Reply reply = new Reply();
		reply.setReplyNo(replyNo);
		reply.setReplyContent(replyContent);
		
		return replyService.updateReply(reply);
	}

 

 

--- 댓글 등록,삭제,수정  Service 

 

	// 댓글 등록 Service
	@Override
	public int insertReply(Reply reply) {
		reply.setReplyContent( Util.XSSHandling( reply.getReplyContent()));
		reply.setReplyContent( Util.newLineHandling( reply.getReplyContent()) );
		return dao.insertReply(reply);
	}
	
	// 댓글 삭제 Service
	@Override
	public int deleteReply(int replyNo) {
		return dao.deleteReply(replyNo);
	}
	
	// 댓글 수정 Service
	@Override
	public int updateReply(Reply reply) {
		return dao.updateReply(reply);
	}

 

 

--- 댓글 등록,삭제,수정 DAO

 

	// 댓글등록 DAO
	public int insertReply(Reply reply) {
		return sqlSession.insert("replyMapper.insertReply",reply);
	}
	// 댓글삭제 DAO
	public int deleteReply(int replyNo) {
		return sqlSession.update("replyMapper.deleteReply",replyNo);
	}
	// 댓글수정 DAO
	public int updateReply(Reply reply) {
		return sqlSession.update("replyMapper.updateReply",reply);
	}

 

 

--- 댓글 등록,삭제,수정 reply-mapper.xml  쿼리문 ! 

 

	<!-- 댓글추가 -->
	<insert id="insertReply" parameterType="reply">
	INSERT INTO REPLY_S VALUES
	(SEQ_REPLY_NO_S.NEXTVAL,
 	 #{replyContent}, DEFAULT, DEFAULT, #{memberNo}, #{boardNo} ,   
 	 <!-- 일반댓글인 경우 -->
 	 <if test="parentReplyNo == 0 ">
 	 	NULL
 	 </if>
 	 <!-- 답글인 경우 -->
 	 <if test="parentReplyNo != 0 ">
 	 	#{parentReplyNo}
 	 </if>
 	  )
	</insert>
	
    
    
	<!-- 댓글삭제 -->
	<update id="deleteReply">
	UPDATE REPLY_S  SET
	REPLY_ST = 'Y'
	WHERE REPLY_NO = ${replyNo}
	</update>
	
	<!-- 댓글수정 -->
	<update id="updateReply" parameterType="reply">
	UPDATE REPLY_S SET
	REPLY_CONTENT = #{replyContent}
	WHERE REPLY_NO = #{replyNo}
	AND REPLY_ST='N'
	</update>

 

 

 

 

 

--------------------------------------------------------------------------------------------------------------------------------------

 

 

 

 

 

 

 

 

 

 

Comments