[mybatis] mysql update문 where 조건 in #{}로 데이터 보내기

Sora Kim·2022년 4월 5일
0

mybatis

목록 보기
1/1
  • jsp에서 체크박스에 체크된 것들만 업데이트 작업하고 싶음.
  • 원하는 쿼리작업 :
    update table_test
    set col_a = "abc"
    where unq in ('1','2','3');
  • #{}대신 ${}로 값을 보내면 for문에서 , 만 붙여주면되서 비교적 쉽고 간단하게 해결 할 수 있지만, 보안상 좋지않다고해서 list와 mybatis foreach를 활용해 보기로 함!
  • list를 map에 넣어 mybatis에 parameterType="Map" 으로 !!
@controller 부분

public String test(HttpServletRequest req, @RequestParam Map<String, Object> params) 
																throws Exception {
	
    // 체크박스 체크된 values 가지고 오기 
    String[] checks = req.getParameterValues("check");
    
    // 받아온 value 값 for문으로 list에 넣어주기
	List<String> check_list = new ArrayList<String>();
    
    for(String id : checks) {
    	check_list.add(id);
    }
    
    // 생략가능 
    System.out.println(check_list); // [1,3,5]
    
    // map에 list 넣어주기
   	params.put("checkList", check_list);
    
    //서비스 실행
    listTestService.listTest(params);
    
    return "";
}

------(service, dao 부분 코드 생략) --------

@mapper.xml

<update id="listTest" parameterType="Map">
	<choose>
    	<when test="checkList.size != 0">
        	UPDATE 
            		table_test
            SET
            		col_a = "abc"
            WHERE
            		unq in
        			<foreach collection="checkList" item="item" 
                    			separator="," open="(" close=")">
                    	#{item}
                    </foreach>
        </when>
    </choose>
</update>

------> 얻은 쿼리

			UPDATE 
            		table_test
            SET
            		col_a = "abc"
            WHERE
            		unq in
        			('1','3','5')

참고
https://java119.tistory.com/85

profile
개발잘하고시풔!!!!!!!

0개의 댓글