경제학도의 개발공간

Spring Ajax 배열파라미터 전달 & Mybatis foreach 본문

BackEnd/Spring

Spring Ajax 배열파라미터 전달 & Mybatis foreach

reallifeliver 2018. 6. 19. 12:50
반응형
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

var pids = [1,2,3,4]

function getFolderList(pids){
    console.log(pids);
    jQuery.ajaxSettings.traditional = true;
    $.ajax({
        url:"selectFolderList.htm",
        method:"post",
        dataType:"json",
        data: {'pids':pids},
        success:function(data){
            console.log(data);
        },
        error:function(error){
            console.log(error);
        }
    })
}
cs


먼저, ajax의 설정을 다음과 같이 변경해준다 .


 jQuery.ajaxSettings.traditional = true;



이후 배열 데이터는 기존 파라미터와 같은 형식으로 보내주고,


컨트롤러에서 다음과 같이 받아주면 끝.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@RequestMapping(value="/selectFolderList.htm", method=RequestMethod.POST)
    public View selectFolderList(@RequestParam(value="pids") List<Integer> pids, Model model) {
        System.out.println("들어옴");
        System.out.println(pids);
        /*ArrayList<String> arraypids=  (ArrayList<String>) pids;*/
        ArrayList<FolderDTO> folderlist = null;
        
        try {
            folderlist =sidebarservice.selectFolderList(pids);
            model.addAttribute("folderlist", folderlist);
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("selectFolderList service cotroller");
        }
        return jsonview;
    }
cs

 


데이터를 이렇게 받은 이유는 Mapper.xml에서 foreach문을 활용해 한번에 데이터를 긁어오기 위함이었다. 


파라미터를 배열의 객체로 받는 것은 금방 해결하였지만, mybatis의 foreach문을 활용하기 위해 파라미터를 배열값으로 넘겨주는 단계에서 꽤나 애를 먹었다.


결론부터 말하자면 List의 배열로 파라미터를 넘겨 주었을 때 Mybatis 쿼리문은 다음과 같이 작성하면 된다 .


1
2
3
4
5
6
7
<select id="selectFolderList" parameterType="java.util.List" resultType="com.apollo.vo.FolderDTO">
        select fid, fname, pid from folder 
        where pid in 
        <foreach collection="list" item="pid"  open="(" close=")" separator=",">
            #{pid}
        </foreach>
</select>
cs


내가 애를 먹은 부분은  


 <foreach collection="list" item="pid"  open="(" close=")" separator=",">


에서의 collection 부분이었다. 


나는 pids라는 이름의 배열을 넘겼기 때문에 collection="pids"라는 방식으로 배열을 활용하려 하였으나, 지속적으로 pids라는 파라미터를 찾을 수 없으며 'list'라는 파라미터를 활용할 수 있다는 뜻의 에러 메시지가 생성되었다.


알고보니, 파라미터를 배열 하나만 넘겼을 경우 collectiion = "list"라고만 입력하면 알아서 파라미터 배열을 사용한다. 


한편, 파라미터를 Map의 형태로 넘겨주었을 때, value를 배열로 가진 Key값을 collection에 입력함으로써 Map에 넣어 보낸 배열값을 활용할 수 있게 된다.

반응형

'BackEnd > Spring' 카테고리의 다른 글

Spring Boot - Lombok Annotation 사용하기  (0) 2018.11.01
[20180510]Spring 비동기처리  (0) 2018.05.10
[20180503]Mybatis WIth Spring  (1) 2018.05.03
[20180503]Mybatis  (0) 2018.05.03
[20180425]AOP(Aspect Oriented Programming)  (0) 2018.05.02