티스토리 뷰

지난 시간에 이어 MyBatis를 이용한 multiQuery 실습을 진행해 보도록 하겠습니다.

 

프로젝트는 기존 jsp02_mutidelete 프로젝트를 복사해 jsp02_multidelete_mybatis 라는 이름으로 진행하겠습니다.

 

 

https://mybatis.org/mybatis-3/ko/dynamic-sql.html

 

MyBatis – 마이바티스 3 | 동적 SQL

동적 SQL 마이바티스의 가장 강력한 기능 중 하나는 동적 SQL을 처리하는 방법이다. JDBC나 다른 유사한 프레임워크를 사용해본 경험이 있다면 동적으로 SQL 을 구성하는 것이 얼마나 힘든 작업인지 이해할 것이다. 간혹 공백이나 콤마를 붙이는 것을 잊어본 적도 있을 것이다. 동적 SQL 은 그만큼 어려운 것이다. 동적 SQL 을 사용하는 것은 결코 파티가 될 수 없을 것이다. 마이바티스는 강력한 동적 SQL 언어로 이 상황은 개선한다. 동적 SQL 엘

mybatis.org


기존 multiDelete

 

기존 multiDelete과정은 다음과 같았다.

 

  1. 게시판list 에서 form 체크박스를 통해 시퀀스 리스트 submit (muldel.jsp 로,,,)
  2. muldel.jsp 에서 request.getParameterValues() 를 통해 체크박스 리스트 받기
  3. 이 list를 DAO 에 파라미터로 보내기
  4. DAO 에서 addBatch()를 통해 메모리에 리스트 적재 후 executeBatch() 로 query 실행..
public int multiDelete(String[] seqList) {
		Connection con = getConnection();
		PreparedStatement pstmt = null;
		int res = 0;

		String sql = " DELETE FROM MDBOARD WHERE SEQ = ? ";

		int[] cnt = null;

		try {
			pstmt = con.prepareStatement(sql);
			for (int i = 0; i < seqList.length; i++) {
				pstmt.setString(1, seqList[i]);
				pstmt.addBatch(); // 메모리에 적재 후, executeBatch() 메소드가 호출될 때 한번에 실행!
				System.out.println("삭제할 번호 : " + seqList[i]);
			}
			System.out.println("3. query 준비 : " + sql);

			cnt = pstmt.executeBatch(); // 메모리에 있던 query를 한번에 실행!, int[]로 리턴!

			// [-2,-2, -3, ...]
			for (int i = 0; i < cnt.length; i++) {
				// -2 : 성공
				// -3 : 실패
				if (cnt[i] == -2) {
					res++;
				}
			}

			if (res == seqList.length) {
				commit(con);
			} else {
				res = 0;
				System.out.println("delete all fail");
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}

		return res;
	}

MyBatis를 이용한 multiDelete

마이바티스는 JSTL 을 이용한 동적 SQL 을 지원한다. 

 

즉 addBatch와 같은 과정을 사용하지 않고 여러 로우에 적용될 트랜잭션을 효과적으로 제어할 수 있다.

 

내용은 

 

https://chohyeonjunn.tistory.com/122?category=752117

 

MyBatis 사용하기!!

본래 java 서버와 DB의 연동에서 jdbcTemplate 를 사용했다.. 1,2,3,4,5 일련의 코드 과정을 거쳐서,,, 마이바티스는 이 과정을 쿼리만 작성하면 모두 자동으로 동작시켜 준다. 마이바티스 프레임워크는 jdbcTem..

chohyeonjunn.tistory.com

 

에 설명된 내용과 다르지 않기 때문에

 

multiDelete 와 관련된 mapper.xmlDAO 에 적용된 코드만 살펴보도록 하겠다.

 

오른쪽 mapper.xml 을 보면 쿼리문 중간에 JSTL 태그 중 반복문인 foreach가 사용된것을 볼 수 있다.

 

마이바티스 동적 SQL 에 foreach 내용을 보면

 

 

라는 내용을 확인할 수 있다. 

 

여기서 중요한 것은 Collection 을 이용해 파라미터를 전달할 수 있다는 것이다.

 

이를 적용해 DAO 에서 seqList를 Map에 담아 전달한 것을 확인할 수 있다.

 

open : 여는 문자열

separator : 구분자

close : 닫는 문자열

 

을 통해 Oracle query 를 완성한 것도 볼 수 있다.

 

mybatis를 통해 생성된 query문을 예를 들어 적어보자면 다음과 같다.

DELETE FROM MDBOARD
WHERE SEQ IN(1, 2, 5, 10)

IN ( 이 괄호안에 들어갈 값들을 foreach 태그를 통해 동적으로 조절할 수 있다. )

'DB > MyBatis' 카테고리의 다른 글

MyBatis XML Files ,,, DTD 파일 설정  (0) 2020.02.02
MyBatis 사용하기!!  (0) 2020.01.30
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/07   »
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
글 보관함