User Guide
|
1. 주요 Class |
- DAOManager : DAO 객체 및 Queries 객체를 생성하기 위한 Factory
- DAO : DB 작업을 수행하기 위한 클래스
- Queries : 설정 파일에 정의된 쿼리 파일의 쿼리들을 담는 클래스
- Task : DAO에서 처리할 작업을 나타내는 클래스
- DAOWorker : DAO 객체를 사용한 일련의 프로세스(업무 흐름)을 보장하여 작업을 수행하기 위한 클래스
|
2. TinyDAO 설정하기 |
1) TinyDAO 설정 파일 |
- TinyDAO의 설정 파일은 dao-config.properties 이며, DAOManager가 ClassLoader를 사용해 로딩한다.
- 즉, Application의 클래스 패스의 루트 디렉토리에 dao-config.properties가 존재해야 한다.
(일반적으로 Web Application인 경우 /WEB-INF/classes, 일반 Application인 경우 Application이 실행되는 현재 디렉토리)
|
#### dao-config.properties 파일 ####
###############################
### Pool Class
###
### @ pool.class : Pool 구현 객체를 지정한다.
### - DbcpConnectionPool : jakarta dbcp를 사용하는 ConnectionPool
### - DSConnectionPool : DataSource를 사용하는 ConnectionPool
### - FakeConnectionPool : Pool을 사용 안하고, 매번 Connection을 생성
###
pool.class = justfun.common.pool.impl.DbcpConnectionPool
# pool.class = justfun.common.pool.impl.DSConnectionPool
# pool.class = justfun.common.pool.impl.FakeConnectionPool
###############################
### Pool Name
###
### @ pool.name : pool 이름을 설정. DSConnectionPool을 사용시 DataSource Resource의 JNDI Name을 설정한다.
###
pool.name = jdbc/oracle
###############################
### Pool General Config
###
### Pool의 일반 설정 정보. (DB 연결 정보 및 Pool 동작 정보)
### 이 정보는 pool.class가 DSConnectionPool로 설정되었을 경우 무시된다.
###
### @ pool.connection.init : 풀의 초기 커넥션 수
### @ pool.connection.min : 풀의 최소 커넥션 수
### @ pool.connection.max : 풀의 최대 커넥션 수
### @ pool.connection.timeout : 커넥션 사용 타임아웃
### @ pool.request.timeout : 커넥션 요청 타임아웃
### @ jdbc.driver : jdbc 드라이버
### @ jdbc.url : DB 연결 정보
### @ jdbc.user : 연결 계정
### @ jdbc.password : 연결 비밀번호
###
pool.connection.init = 5
pool.connection.min = 5
pool.connection.max = 10
pool.connection.timeout = 300
pool.request.timeout = 100
jdbc.driver = [JDBC driver]
jdbc.url = [DB Connection url]
jdbc.user = [user id]
jdbc.password = [password]
###############################
### Query File Path
###
### 쿼리 파일 경로. QueryLoader로 로딩할 쿼리 파일 경로
### 쿼리 파일 경로는 ClassLoader에 의해 로딩되는 리소스 경로이며, 실행되는 Application의 클래스 패스를 기준으로 설정해야 한다.
### (File System Path가 아님. DbUtils 참조).
### ex) justfun.common.query 패키지의 Query.properties 파일인 경우 /justfun/common/query/Query.properties 이다.
###
### 여러 파일을 사용할 경우 Comma(,) 로 구분하여 설정할 수 있다.
queryfile.path = /sql01.properties, /sql02.properties
queryfile.path.xml = /sql-example.xml
|
2) 쿼리 파일 |
- TinyDAO의 쿼리 파일은 Properties 파일과 XML 파일을 사용할 수 있다.
- 별도의 쿼리 파일에 쿼리를 정의함으로써 쿼리를 보다 효율적으로 관리할 수 있다.
|
properties 파일
# 일반적인 properties 파일의 사용법과 동일하게 [id] = [value] 형식으로 작성한다.
# properties의 [id]는 쿼리 아이디로, [value]는 SQL 문으로 정의한다.
queryid = select COL from TABLE
XML 파일 - XML 쿼리 파일은 다음과 같이 정의한다.
select COL from TABLE
|
3. TinyDAO 사용하기 |
1) TinyDAO의 기본적인 사용 예제 |
/*
* 1. DAO 객체를 생성하기 위해 DAOManager 객체를 얻는다.
*/
DAOManager mgr = DAOManager.getInstance();
DAO dao;
try{
/*
* 2. DAOManager를 초기화한다.
* DAOManager를 초기화하면 설정 파일의 설정 정보를 읽어 Connection Pool을 생성하고, Query 파일을 로딩한다.
*/
mgr.initialize();
/*
* 3. DAOManager로부터 DAO 객체를 얻는다.
* DAO는 객체 생성시 DAOManager에서 관리되는 Connection Pool로부터 Connection을 할당받는다.
*/
dao = mgr.getDAO();
/*
* 4. 쿼리 수행 작업
*/
List list = dao.select("select COL from TABLE", null);
}
catch(Exception ex){
// Exception handling code here
}
finally{
/*
* 5. DAO 리소스를 해제한다.
* DAO 리소스 해제시 DAO는 사용중이던 Connection을 Connection Pool로 반환한다.
*/
if( dao != null )
try{ dao.destroy(); }catch(Exception ex){}
/*
* 6. DAOManager 리소스를 해제한다. DAOManager 리소스 해제시 pool이 close 된다.
*/
mgr.destroy();
}
|
2) SELECT 쿼리 사용 예제 |
...
/*
* DAO 객체의 select() 메소드를 호출하여 SELECT 쿼리 작업을 수행할 수 있다.
*/
List list = dao.select("select COL from TABLE", null);
/*
* 쿼리에 바인딩 할 파라미터가 존재하는 경우 select() 메소드에 Object[] 로 넘겨주면 된다.
*/
List list = dao.select("select COL from TABLE where COL1 = ? and COL2 = ?", new Object[]{ "param1", "param2" });
...
|
3) INSERT/UPDATE/DELETE 쿼리 사용 예제 |
...
/*
* DAO 객체의 update() 메소드를 호출하여 SELECT 쿼리 작업을 수행할 수 있다.
*/
int updateRows = dao.update("update TABLE set COL = ?", new Object[]{ "param" });
...
|
4) PROCEDURE 호출 사용 예제 |
...
/*
* DAO 객체의 procedure() 메소드를 호출하여 SELECT 쿼리 작업을 수행할 수 있다.
*/
dao.procedure("{call USER_PROCEDURE_NAME(?)}", new Object[]{ "param" });
...
|
5) FUNCTION 호출 사용 예제 |
...
/*
* DAO 객체의 function() 메소드를 호출하여 SELECT 쿼리 작업을 수행할 수 있다.
*/
String result = dao.function("{ ? = call USER_FUNCTION_NAME(?) }", new Object[]{ "param" });
...
|
5) 쿼리 파일에 정의된 쿼리 사용하기 |
...
/*
* DAOManager의 getQueries() 메소드를 호출하여 Queries 객체를 얻는다.
*/
DAOManager mgr = DAOManager.getInstance();
Queries query = mgr.getQueries();
/*
* Queries 객체로부터 쿼리 파일에 정의된 쿼리 아이디로 쿼리를 얻을 수 있다.
*/
String sql = query.getQuery("query.id");
...
|
4. Web Application에서 TinyDAO 사용하기 |
1) justfun.dao.webapp.InitServlet을 사용한 DAOManager 초기화 및 해제 |
- DAOManager는 초기화 시에 pool을 생성하며, destroy시에 pool을 해제한다.
이는 곧 Application의 생명 주기 중 Appilcation의 초기화 과정에서 DAOManager가 초기화 되고,
Application의 소멸 과정에서 DAOManager를 destroy 되어야 함을 의미한다.
일반 클라이언트 Application 개발 시에는 Window Event를 이용하여 명확하게 DAOManager의 생성 및 소멸 시점을 알 수 있으며,
Web Application의 경우엔 Servlet의 init() 메소드와 destroy() 메소드를 이용하여 생성 및 소멸 시점을 알 수 있다.
TinyDAO에는 Web Application 환경에서 위와 같은 DAOManager의 생성 및 소멸을 자동화 해주는 Servlet을 제공한다.
|
/** DAOManager의 생성 및 소멸을 자동화 해준는 InitServlet 구현 코드 */
package justfun.dao.webapp;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import justfun.dao.DAOManager;
public final class InitServlet extends HttpServlet {
private void debug(String s) {
System.out.println(s);
}
/**
* Init Servlet
*/
public void init(ServletConfig config) throws ServletException {
super.init(config);
try {
DAOManager daoManager = DAOManager.getInstance();
daoManager.initialize();
debug("Initialize Complete DB Pool [ DBInitServlet.init() ] : " + daoManager);
}
catch (Exception ex) {
debug(ex.toString());
}
}
/**
* Destroy Servlet
*/
public void destroy() {
try {
/* Destroy DB Connection Pool */
DAOManager daoManager = DAOManager.getInstance();
daoManager.destroy();
debug("Destroy Complete DB Pool [ DBInitServlet.destroy() ]");
}
catch (Exception ex) {
debug(ex.toString());
}
finally {
super.destroy();
}
}
}
|
- InitServlet을 사용하려면, web.xml에 다음의 내용을 추가하면 된다.
|
/** web.xml 추가 내용 */
TinyDAO Servlet
justfun.dao.webapp.InitServlet
1
|