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의 값이 같아야 한다...