출처: http://egloos.zum.com/slog2/v/3572025
1. iBatis 트랜잭션 처리
sqlMapClient 인터페이스는 트랜잭션 경계를 지정하기 위한 메소드를 가집니다
다음과 같은 메소드를 사용해 커밋/롤백 됩니다
public void startTransaction() throws SQLException
public void commitTransaction() throws SQLException
public void endTransaction() throws SQLException
예제)
public void reply(ReVO vo) throws SQLException {
// start 한뒤 commit 이 일어나지 않은 상태에서 end 가 되면 자동으로 롤백
try {
sqlMapper.startTransaction();
sqlMapper.update("re.addStep",vo);
sqlMapper.insert("re.reply",vo);
sqlMapper.commitTransaction();
} finally {
sqlMapper.endTransaction();
}
}
소스를 보면 startTransaction 으로 트랜잭션의 시작을 알리고
작업 수행중에
익셉션이 발생하게 되면 바로 finally에서 transaction을 끝내고
그렇지 않으면 마지막에 commit 을 수행하고 finally에서 transaction을 끝냅니다..참 간단 하네요 ㅎ
( 롤백은 commitTransaction을 수행하지 않고 endTransaction을 수행하면 자동으로 수행됩니다 ~ )
finally 구문은 익셉션이 발생하든 안하든 무조건 try문이 끝나고 수행되는거 알고 계시죠? ^^
주의!
startTransaction()을 호출하는 쓰레드가 트랜잭션처리를 위해 유일한 Connection 객체를 갖게 됩니다
그러니 반드시 endTransaction()을 호출해서 Connection 객체를 반환해야합니다
그렇지 않으면 중대한 영향을 미치게됩니다 ( 심하면 다운될수도... )
2. 외부/프로그래밍적 트랜잭션
Spring 또는 EJB 등의 프레임워크를 이용해 전역 트랜잭션을 관리 할 수 있습니다
그럴 경우엔 SQL Map 트랜잭션 제어 메소드는 사용할 필요가 없어지게됩니다..
외부적 또는 프로그래밍적 전역 트랜잭션을 지원하기 위해서는 SQLMap 설정파일에서
<transactionManager> type 속성을 "EXTERNAL"으로 설정해야 합니다
출처: http://blog.daum.net/marique/21
queryForObject
DB로부터 1개의 레코드를 가져와 자바 객체에 저장한다.
오직 한 개의 레코드만 반환되는 여부를 검사하는 메소드 이므로, 하나 이상의 레코드가 반환되는 경우 예외처리 됨.
그리고 값이 없을 경우는 null을 반환.
queryForList
DB로부터 1개 이상의 레코드를 가져와 자바 객체의 List를 만드는데 사용한다.
'개발 > JAVA' 카테고리의 다른 글
org.apache.jasper.JasperException: javax.servlet.ServletException: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure (0) | 2019.05.07 |
---|---|
jsp__iframe에 parameter 넣어서 전달하기 (0) | 2019.04.04 |
Spring MySQL DataSource 부분 정리 (0) | 2018.08.08 |
밀2호:계산기 ver.2 (0) | 2018.07.24 |
Java GUI 다시 공부 (0) | 2018.07.12 |