[작성일: 2023. 05. 10]
2024.08.24 - [WEB/Back-End] - [Spring] 검색처리
Reply 기능 구현
Reply 테이블 구성
CREATE TABLE tbl_reply (
RNO int(10),
BNO int(10) NOT NULL,
REPLY varchar(2000) NOT NULL,
REPLIER varchar(50) NOT NULL,
REPLYDATE date DEFAULT sysdate(),
UPDATEDATE date DEFAULT sysdate(),
PRIMARY KEY (RNO)
)
SELECT * FROM TBL_REPLY;
CREATE SEQUENCE SEQ_REPLY NOCACHE;
ReplyMapper Interface 생성(empty)
- com.it.example.mappers/
- ReplyMapper.java 인터페이스 생성
@Mapper
public interface ReplyMapper {
// 댓글 등록
public int insert(ReplyVO reply);
}
ReplyMapper.xml 생성
- 빈 xml 생성
ReplyMapperTest
- Mapper 생성 테스트
- testMapper() : mapper.toString() 출력
@SpringBootTest
@Slf4j
@RunWith(SpringJUnit4ClassRunner.class)
public class ReplyMapperTest {
@Autowired
private ReplyMapper mapper;
@Test
public void testMapper() {
log.info("----------------------Mapper Test----------------------");
log.info(mapper.toString());
}
ReplyMapper.xml
- insert에 해당하는 query 작성
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- 연결할 인터페이스 경로를 namespace에 작성 -->
<mapper namespace="com.it.example.mappers.ReplyMapper">
<insert id="insert">
INSERT INTO TBL_REPLY (RNO, BNO, REPLY, REPLIER)
VALUES (NEXTVAL(SEQ_REPLY), #{bno}, #{reply}, #{replier})
</insert>
</mapper>
ReplyMapperTest
- testInsert()로 10개의 댓글 생성
@Test
public void testInsert() {
// 5개의 게시글에 2개씩 댓글을 달아봅시다.
IntStream.rangeClosed(1, 10).forEach(i -> {
ReplyVO reply = new ReplyVO();
reply.setBno(arBno[i%5]);
reply.setReply("댓글 자동 생성" + i);
reply.setReplier("Robot.A" + i);
mapper.insert(reply);
});
}
ReplyMapper에 read() 생성
@Mapper
public interface ReplyMapper {
// 댓글 등록
public int insert(ReplyVO reply);
// 댓글 1개 조회
public ReplyVO read(Long rno);
}
ReplyMapper.xml
- read에 해당하는 query 작성
...
</insert>
<select id="read" resultType="replyVO">
SELECT RNO, BNO, REPLY, REPLIER, REPLYDATE, UPDATEDATE
FROM TBL_REPLY
WHERE RNO = #{rno}
</select>
</mapper>
config.config.xml
- replyVO를 등록해야 함.
...
<typeAlias alias="replyVO" type="com.it.example.beans.vo.ReplyVO"></typeAlias>
</typeAliases>
</configuration>
ReplyMapperTest에 testRead()로 1개의 댓글 조회하기
@Test
public void testRead() {
Long targetRno = 38L;
ReplyVO reply = mapper.read(targetRno);
log.info("---------reply ok----------");
log.info(reply.toString());
}
delete 기능 구현(댓글 지우기)
- insert, read와 순서 똑같음.
@Mapper
public interface ReplyMapper {
// 댓글 등록
public int insert(ReplyVO reply);
// 댓글 1개 조회
public ReplyVO read(Long rno);
// 댓글 삭제
public int delete(Long rno);
}
<delete id="delete">
DELETE FROM TBL_REPLY WHERE RNO = #{rno}
</delete>
@Test
public void testDelete() {
Long targetRno= 10L;
mapper.delete(targetRno);
}
- 이미 지워진 댓글을 또 지워도 오류는 아님.
@Test
public void testDelete() {
Long targetRno= 10L;
int deleteCount = mapper.delete(targetRno);
log.info("reply delete -----------------");
log.info("delete count : " + deleteCount);
}
update 기능 구현(댓글 수정하기)
- insert, read, delete와 순서는 같음.
@Mapper
public interface ReplyMapper {
// 댓글 등록
public int insert(ReplyVO reply);
// 댓글 1개 조회
public ReplyVO read(Long rno);
// 댓글 삭제
public int delete(Long rno);
// 댓글 수정
public int update(ReplyVO reply);
}
<update id="update">
UPDATE TBL_REPLY
SET REPLY = #{reply}, UPDATEDATE = SYSDATE()
WHERE RNO = #{rno}
</update>
@Test
public void testUpdate() {
Long targetRno = 9L;
ReplyVO reply = mapper.read(targetRno);
reply.setReply("Update 완료");
int updateCount = mapper.update(reply);
log.info("reply update -----------------");
log.info("update count : " + updateCount);
}
🐣 해당 게시글은 입문 개발자가 요약/정리한 글이므로 틀린 내용이나 오타가 있을 수 있습니다.