티스토리 뷰
지난 시간에 이어 MyBatis를 이용한 multiQuery 실습을 진행해 보도록 하겠습니다.
프로젝트는 기존 jsp02_mutidelete 프로젝트를 복사해 jsp02_multidelete_mybatis 라는 이름으로 진행하겠습니다.
https://mybatis.org/mybatis-3/ko/dynamic-sql.html
기존 multiDelete
기존 multiDelete과정은 다음과 같았다.
- 게시판list 에서 form 체크박스를 통해 시퀀스 리스트 submit (muldel.jsp 로,,,)
- muldel.jsp 에서 request.getParameterValues() 를 통해 체크박스 리스트 받기
- 이 list를 DAO 에 파라미터로 보내기
- 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
에 설명된 내용과 다르지 않기 때문에
multiDelete 와 관련된 mapper.xml 과 DAO 에 적용된 코드만 살펴보도록 하겠다.
오른쪽 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
- 상속
- Delete
- OOP
- select
- JDBC 프로그램 작성단계
- Update
- INSERT
- Oracle
- JdbcTemplate
- view
- model
- ojdbc6.jar
- 객체
- controller
- java
- 캡슐화
- 다형성
- jdbc
- Scott/Tiger
- 추상화
- 객체지향
- java 환경설정
- .
- MVC
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |