Mybatis로 개발하던 중 리스트성의 데이터를 입력하는 경우가 발생하였습니다.
java에서 반복문을 실행하려 하였으나 해당 방법을 이용하면 sqlSession 을 반복 사용하게 되어 속도가 저하 됩니다.
그래서 쿼리단에서 반복문(foreach)을 사용하여 입력하는 방식을 사용하였습니다.
데이터를 셋팅하는 부분은 임의로 만들어 냈으며 DAO 부분입니다. (java 부분)
mysql에서는 반복하여 입력할때 아래와 같은 방식으로 등록이 가능합니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | insert into calculate_staff( company_id, name, contact, contact2, email, use_yn, register_user_id )values ( 123, '허균_0', '1230', '12340', '0husk@tistory.com', 'Y', 'husk' ), ( 123, '허균_1', '1231', '12341', '1husk@tistory.com', 'Y', 'husk' ), ( 123, '허균_2', '1232', '12342', '2husk@tistory.com', 'Y', 'husk' ) |
위 샘플과 같은 방식으로 쿼리를 생성해 줄 것 입니다.
쿼리를 생성할때 Map안에 기본 값 및 list 형식을 섞어 넣은 예제 입니다.
java 소스 입니다. (DAO)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | @Override public int regCalculateStaff() { Map<String, Object> paramMap = new HashMap<String, Object>(); paramMap.put("company_id", 123); paramMap.put("user_id", "husk"); Map<String, Object> staffMap; List<Map<String, Object>> staffList = new ArrayList<Map<String, Object>>(); for(int i=0;i<3;i++){ staffMap = new HashMap<String, Object>(); staffMap.put("staff_name", "허균_"+0); staffMap.put("staff_contact", "123"+0); staffMap.put("staff_contact2", "1234"+0); staffMap.put("staff_email", 0+"husk@tistory.com"); staffMap.put("staff_use_yn", "Y"); staffList.add(staffMap); } paramMap.put("staffList", staffList); return sqlSession.insert("insertCalculateStaff", paramMap); } |
xml 부분입니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | <insert id="insertCalculateStaff" parameterType="java.util.HashMap"> <if test="staffList.size != 0"> insert into calculate_staff( company_id, name, contact, contact2, email, use_yn, register_user_id )values <foreach collection="staffList" item="item" separator=","> ( #{company_id}, #{item.staff_name}, #{item.staff_contact}, #{item.staff_contact2}, #{item.staff_email}, #{item.staff_use_yn}, #{user_id} ) </foreach> </if> </insert> |
foreach에서 쓰인 collection 부분은 map의 키로 쓰인 부분을 적어주시면 됩니다.
[foreach]
collection : parameterType으로 넘어온 map안에 list (map에 key값)
item : collection을 사용할 변수 명
seperator : 반복 문자열을 구분 할 문자
Spring 파일 디렉토리 경로 다운로드 (9) | 2016.09.20 |
---|---|
[mybatis] foreach를 이용한 다중 insert (0) | 2016.08.31 |
부트스트랩 페이징, 페이지네이션 (Bootstrap Pagination), 페이징 예제 (0) | 2016.07.29 |
MyBatis (foreach문, in절) (0) | 2016.07.06 |
Mybatis like 문 사용하기 (oracle, mysql) (0) | 2016.06.03 |
댓글 영역