YJ의 새벽
Spring 19 ( 댓글 , 대댓글 삽입,수정,삭제 ) 본문
--- 댓글 테이블을 살펴보자.
-- 이상태로 목록을 뽑아가면 , 댓글,대댓글 정렬이 아니라, 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>
--------------------------------------------------------------------------------------------------------------------------------------
'Spring > Spring' 카테고리의 다른 글
Spring ( AOP 관점 지향 프로그래밍 ) (0) | 2023.05.12 |
---|---|
Spring ( @Scheduled ) (0) | 2023.05.11 |
Spring 18 ( 게시글 삭제 ) (0) | 2023.05.09 |
Spring 17 ( 게시글 작성/수정) (0) | 2023.05.08 |
Spring 16 ( pagination + 게시글조회 + 조회수증가(중복x)) (0) | 2023.05.02 |