배열로 넘어온 값을 sql문에 적용

박병주·2023년 1월 26일
0

Spring

목록 보기
4/6

배열로 저장된 여러 값들을 Mybatis의 sql문으로 적용하는 법에 대해서 알아보자.
jsp > controller > service > DAO > mybatis

Controller

@RequestMapping(value = { "/deleteMulti" }, method = RequestMethod.POST)
    public ModelAndView deleteMulti(HttpServletRequest httpServletRequest, @RequestParam Map<String, Object> params,
            ModelAndView modelAndView) {
        // modelAndView.addObject("resultMap", resultMap);
        String[] deleteMultis = httpServletRequest.getParameterMap().get("COMMON_CODE_ID");
        params.put("deleteMultis", deleteMultis);
        Object resultMap = commonCodeOurService.deleteMulti(params);

        modelAndView.setViewName("commonCode_our/list");
        return modelAndView;
    }

HttpServletRequest 클래스를 이용해 배열로 된 deleteMultis라는 배열을 만들었다.
deleteMultis를 params에 put해주고 commonCodeOurService.deleteMulti(params) 서비스로 넘겨 준다.

HttpServletRequest를 이용해 여러 파라미터를 받아오는 방법은 다음 링크를 참고.
여러체크박스파라미터를받아오자

Service

public Object deleteMulti(Object dataMap){
        String sqlMapId = "CommonCodeOur.deleteMultiByUIDs";

        Object result = commonCodeOurDao.delete(sqlMapId, dataMap);
        return result;    
    }
  • dataMap에는 컨트롤러에서 받았던 deleteMultis가 Map형식으로 들어있으며 SqlMapId와 함께 DAO로 넘어간다.

DAO

public Object delete(String sqlMapId, Object dataMap){
        Object result = sqlSessionTemplate.delete(sqlMapId, dataMap);
        return result;
    }

sqlSessionTemplate를 이용해서 서비스에서 받아온 sqlMapId, dataMap을 Mybatis로 넘겨주게 된다.

Mybatis xml

<?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="CommonCodeOur">
    <!-- call CommonCodeOur.deleteMultiByUIDs -->
    <delete id="deleteMultiByUIDs" parameterType="Map">
        DELETE FROM CIP_COMMON_CODE
        WHERE COMMON_CODE_ID IN 
            <foreach collection="deleteMultis" item="item" 
                open="(" separator="," close=")">
                #{item}
            </foreach>
    </delete>
</mapper>

받아온 sqlMapId(CommonCodeOur.deleteMultiByUIDs)로 매핑된 sql문에 접근하여 foreach문을 통해서 sql문에 리스트에 담긴 값들을 넣어주게 된다.

foreach문의 속성

  • open : 반복문의 시작 지점에 들어가는 문자열
  • separator : 반복 구간마다 들어갈 구분자
  • close : 반복문이 끝나는 시점에 들어가는 문자열
profile
Developer

0개의 댓글