DAO작성

Tags:

자바서비스넷(javaservice.net)에서 퍼옴
—————————–

안녕하세요 ?

혹시 도움이 될까하여 제가 사용하는 방식을 적어 보겠습니다. ^^

저도 차의중님께서 쓰신글과 마찬가지로 Connection 을 계속 재사용 하는 방식을 선호합니다.
차의중님께서 말씀하신대로 getConnection 하고 releaseConnection 하는 COST 도 많이
줄어 들고, 여러 DAO 에 대한 작업을 손쉽게 한 트랜잭션에서 할수 있다는 장점도 있죠.
물론 같은 Connection 이니까 같은 Session 을 바라보는 장점도 있습니다.
예를 들어 한 DAO 에서 insert 한 결과를 commit 하지 않고 다른 DAO 에서 select 할수
있는점이죠.
또한 바깥에서 Connection 을 들고 있으니까 DAO 마다 getConnection 후에 release 하지 않아서
생기는 누수를 조금 줄일수 있는 장점도 있습니다.

DBUtil 에는 기본적으로 Connection 및 Resultset , Statement 에 대한 공통 코드를 모아 놓습니다.
실제 SQL 수행하는 로직(executeQuery , executeUpdate)은 별도의 DAO 에서 관리하구요 .

코드를 보면 다음과 같습니다.

public class DBUtil() {

public static Connection getConnection() {
Connection dbConnection = connMgr.getConnection() ;
reuturn dbConnection ;
}

public static void closeConnection( Connection dbConnection ) {
// connection close
}

public static void closeStatement( Statement stmt ) {
// statement close
}

….

// roll back and commit 등등 필요한거 구현

}

// 업무 XXX 에 대한 DAO 생성자로 Connection 을 받습니다.
// 그러면 해당 DAO 인스턴스는 해당 Connection 을 계속 재사용하게 되죠.
// 이 Connection 은 외부에서 넘겨 준것이므로 해당 DAO 는 release 는 할수 없죠.
// 업무 DAO 에서는 ResultSet 과 Statement 만을 생성하고 close 합니다.

public class XXXDao {

Connection dbConnection = null;

public XXXDao( Connection dbConnection ) {
this.dbConnection = dbConnection ;
}

public Vector doXXXDBLogic( String param1 ) throws Exception {

// …

Statement stmt = null;
ResultSet rset = null;

try {

stmt = dbConnection.createStatement();
stmt.executeQuery( “select 어쩌구.. “);
// Vector 에 결과 저장 & return
} catch (Exception ex) {
// exception 처리
throw ex ;
} finally {
DBUtil.closeStatement( stmt ) ; // statement close
DBUtil.closeResultSet( rset ) ; // resultset close
}
}

}

위의 두 클래스를 이용해서 다음과 같이 사용합니다. 실제로 업무를 Control 하는 layer 의
클래스에서 사용되겠죠.

Connection conn = null;

try {
conn = DBUtil.getConnection();

YYYDAO yyyDAO = new YYYDAO( conn) ;
yyyDAO.callSomeDBMethod1();
yyyDAO.callSomeDBMethod2();

XXXDAO xxxDAO = new XXXDAO( conn ) ;
Vector vecRef = xxxDAO.doXXXDBLogic(“PARAM”) ;

DBUtil.commitConnection( conn ) ; // 정상적인 경우 Commit
} catch ( Exception e ) {
DBUtil.rollbackConnection( conn ) ; // 오류시 Rollback
} finally {
DBUtil.releaseConnection( conn ) ; // 항상 Close
}

감사합니다.

==================================
즐거운 하루 되십시오
http://nautes74.xdns.co.kr
==================================

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *