[B -2-33] Ajax 댓글 처리 6

2019. 10. 6. 21:54Project B (SPMS)/Project B 파트5

반응형

@Param 어노테이션과 댓글 목록

 

src/main/java

com.spms.mapper

ReplyMapper.java 인터페이스

getListWithPaging()

 

...더보기
package com.spms.mapper;

import java.util.List;

import org.apache.ibatis.annotations.Param;

import com.spms.domain.Criteria;
import com.spms.domain.ReplyVO;

public interface ReplyMapper {
	public int insert(ReplyVO vo);
	public ReplyVO read(Long bno);
	public int delete(Long rno);
	public int update(ReplyVO reply);
	public List<ReplyVO> getListWithPaging(@Param("cri") Criteria cri, @Param("bno") Long bno);
}

 

댓글 목록페이징 처리는 기존 게시물 페이징 처리와 유사하지만, 추가적으로 특정 게시물의 댓글들만을 대상으로 하기때문에 추가로 게시물 번호가 필요하게 된다.

 

마이바티스두 개 이상의 데이터를 파라미터로 전달하기 위해서는 다음과 같은 방식이 있다.

1) 별도의 객체로 구성

2) Map 이용

3) @Param 이용

 

위 방식중에 3번 방식이 제일 간단하게 사용할 수 있다.

@Param의 속성값은 마이바티스에서 SQL을 이용할 때 #{ }의 이름으로 사용가능하다

페이징 처리는 기존과 동일하게 Criteria를 이용한다.

여기에 추가적으로 해당 게시물의 번호는 파라미터를 전달하도록 ReplyMapper를 구성한다.

 


src/main/resources

com

spms

mapper

ReplyMapper.xml

getListWithPaging()

 

...더보기
<?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">
<mapper namespace="com.spms.mapper.ReplyMapper">
	
	<insert id="insert">
		insert into TBL_REPLY (
			RNO, BNO, REPLY, REPLYER
		)
		values (
			SEQ_REPLY.NEXTVAL, #{bno}, #{reply}, #{replyer}
		)
	</insert>
	
	<select id="read" resultType="com.spms.domain.ReplyVO">
		select *
		from TBL_REPLY
		WHERE RNO = #{rno}
	</select>
	
	<delete id="delete">
		delete from TBL_REPLY
		where RNO = #{rno}
	</delete>
	
	<update id="update">
		update TBL_REPLY
		set REPLY = #{reply},
			UPDATEDATE = SYSDATE
		where RNO = #{rno}
	</update>
	
	<select id="getListWithPaging" resultType="com.spms.domain.ReplyVO">
		select RNO, BNO, REPLY, REPLYER, REPLYDATE, UPDATEDATE
		from TBL_REPLY
		where bno = #{bno}
		order by RNO asc
	</select>
	
</mapper>

 

XML에서 #{bno} @Param("bno")매칭되서 사용되는 점에 주목해야 한다.


src/test/java

com.spms.mapper

ReplyMapperTests.java

testList()

 

...더보기
package com.spms.mapper;

import java.util.List;
import java.util.stream.IntStream;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import com.spms.domain.Criteria;
import com.spms.domain.ReplyVO;

import lombok.Setter;
import lombok.extern.log4j.Log4j;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = {com.spms.config.RootConfig.class} )
@Log4j
public class ReplyMapperTests {

	private Long[] bnoArr = { 524313L, 524312L, 524311L, 524310L, 524309L };
	
	@Setter(onMethod_ = @Autowired)
	private ReplyMapper replyMapper;
	
	
	public void testMapper() {
		log.info(replyMapper);
	}
	
	
	public void testCreate() {
		IntStream.rangeClosed(1, 10).forEach(i -> {
			ReplyVO replyVO = new ReplyVO();
			replyVO.setBno(bnoArr[i % 5]);
			replyVO.setReply("댓글 테스트! " + i);
			replyVO.setReplyer("작성자" + i);
			replyMapper.insert(replyVO);
		});
	}
	
	
	public void testRead() {
		Long targetRno = 5L;
		ReplyVO replyVO = replyMapper.read(targetRno);
		log.info(replyVO);
	}
	
	
	public void testDelete() {
		Long targetRno = 7L;
		replyMapper.delete(targetRno);
	}
	
	public void testUpdate() {
		Long targetRno = 10L;
		ReplyVO replyVo = replyMapper.read(targetRno);
		replyVo.setReply("Update Reply");
		int count = replyMapper.update(replyVo);
		log.info("UPDATE COUNT : " + count);
	}
	
	@Test	
	public void testList() {
		Criteria cri = new Criteria();
		List<ReplyVO> replies = replyMapper.getListWithPaging(cri, bnoArr[0]);
		replies.forEach(reply -> log.info(reply));
		
	}
	
}

 


댓글 목록 유닛 테스트

 

...더보기
|----|-------|-----------|--------|----------------------|----------------------|
|rno |bno    |reply      |replyer |replydate             |updatedate            |
|----|-------|-----------|--------|----------------------|----------------------|
|12  |524313 |댓글 테스트! 10 |작성자10   |2019-10-06 20:15:44.0 |2019-10-06 20:15:44.0 |
|----|-------|-----------|--------|----------------------|----------------------|

 

반응형

'Project B (SPMS) > Project B 파트5' 카테고리의 다른 글

[B -2-35] Ajax 댓글 처리 8  (0) 2019.10.06
[B -2-34] Ajax 댓글 처리 7  (0) 2019.10.06
[B -2-32] Ajax 댓글 처리 5  (0) 2019.10.06
[B -2-31] Ajax 댓글 처리 4  (0) 2019.10.06
[B -2-30] Ajax 댓글 처리 3  (0) 2019.10.06