Mybatis는 배열 파라미터를 받지 못한다.

이승철·2021년 10월 15일
0

Mybatis는 배열 파라미터를 받지 못한다.

<!--선택한 메시지들 삭제하기-->
    async function trashMessage() {
        const response=await axios.post('/message/delete', arr)
        const result=response.data
        return result
    }

여기서 arr은 정수 배열임

@PostMapping("/delete")
    public void removeMessage(@RequestBody List<Long> ntno_id) {
        log.warn("messageController......delete......");
        log.warn("messageController......delete......");
        log.warn(ntno_id);
        if (ntno_id.size()==0) {
            return;
        }
        messageService.removeMessage(ntno_id);
    }

자바스크립트로부터 @RequestBody를 통해 배열은 제대로 넘어옴.

단, 서비스 계층에서 Mapper로 배열을 넘길때 Map으로 변환한 후에 보내줘야 함.

@Override
    public void removeMessage(List<Long> ntno_id) {
        log.warn("MessageServiceImpl.......removeMessage........");
        log.warn("MessageServiceImpl.......removeMessage........");
        Map<String,List<Long>> hashmap=new HashMap<>();
        hashmap.put("ntno_id",ntno_id);
        messageMapper.deleteMessage(hashmap);
    }

매퍼 파일

public interface MessageMapper {
void deleteMessage(Map<String,List<Long>> ntno_id);
<!--메시지를 한꺼번에 여러개 삭제하기-->
    <sql id="deleteArr">
        <foreach collection="ntno_id" item="item" separator=" OR ">
            ntno_id=#{item.value}
        </foreach>
    </sql>

여기서 Map의 key 내용과 mapper.xml의 foreach의 collection의 값이 같아야 한다...

0개의 댓글