<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ page import="com.ibatis.sqlmap.client.SqlMapClient" %>
<%@ page import="java.util.List" %>
<%@ page import="xf.common.*" %>
<%@ page import="xf.modules.sample.sampleDTO" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html lang="ko" xmlns="http://www.w3.org/1999/xhtml" xml:lang="ko">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta content="no" http-equiv="imagetoolbar"/>
<title>iBatis 동적 Connection Sample</title>
</head>
<body>
<form id="list_form" name="list_form">
<table border="1" cellspacing="0" cellpadding="0" width="100%">
<colgroup>
<col width="80" />
<col width="*" />
</colgroup>
<thead>
<tr>
<th scope="col">인덱스</th>
<th scope="col">타이틀</th>
</tr>
</thead>
<tbody>
<%
// SqlMapConfig Connection : WEB-INF/Classes 하위 경로 부터
// 동적으로 SqlMapConfig 로드함.
String resource = "xf/modules/sample/SqlMapConfig.xml";
SqlMapClient conn = SqlMapConfig(resource).getSqlMapInstance();
// 아래부터는 예제로 작성됨...
// getSample statement call
List result = conn.queryForList("getSample",null);
// for begin
for(int i = 0; i < result.size(); i ++) {
// sampleDTO bean
sampleDTO sample = (sampleDTO) result.get(i);
int idx = sample.getIdx();
String title = sample.getTitle();
%>
<tr>
<td><%=idx%></td>
<td><a href="./sample.update.jsp?idx=<%=idx%>"><%=title%></a></td>
</tr>
<% } %>
</tbody>
<tfoot>
<tr>
<td colspan="2"><a href="./sample.insert.jsp">등록</a></td>
</tr>
</tfoot>
</table>
</form>
</body>
</html>
iBATIS에서 SqlMapConfig.xml 에 맵을 모두 설정하지 않고, 분할하여 관리할 수 있게 수정함.
하나의 iBatis 에서 여러 DBMS 커넥에 가능하며, 하나의 맵 오류로 인해 전체에 영향을 미치지 않게 되었다.
Java Source : SqlMapConfig.java
package xf.common;
/*
'// Connection
'// programmed by 최석균
'// http://syaku.tistory.com
*/
import java.io.Reader;
import com.ibatis.common.resources.Resources;
import com.ibatis.sqlmap.client.SqlMapClient;
import com.ibatis.sqlmap.client.SqlMapClientBuilder;
public class SqlMapConfig {
private static final SqlMapClient sqlMap;
private static String resource = "SqlMapConfig.xml";
public SqlMapConfig() {
}
public SqlMapConfig(String resource) {
this.resource = resource;
}
static {
try {
Reader reader = Resources.getResourceAsReader (resource);
sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException ("Error initializing SqlConfig class. Cause: " + e);
}
}
public static SqlMapClient getSqlMapInstance() {
return sqlMap;
}
}
XML Source : SqlMapConfig.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMapConfig PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-config-2.dtd">
<sqlMapConfig>
<properties resource="SqlMapConfig.properties" />
<settings
cacheModelsEnabled="true"
enhancementEnabled="true"
lazyLoadingEnabled="true"
maxRequests="32"
maxSessions="10"
maxTransactions="5"
useStatementNamespaces="false"
/>
<typeAlias alias="order" type="testdomain.Order"/>
<transactionManager type="JDBC" >
<!--
<dataSource type="SIMPLE">
<property name="JDBC.Driver" value="${driver}"/>
<property name="JDBC.ConnectionURL" value="${url}"/>
<property name="JDBC.Username" value="${username}"/>
<property name="JDBC.Password" value="${password}"/>
</dataSource>
-->
<dataSource type="JNDI">
<property name="DataSource" value="java:${data_source_name}" />
</dataSource>
</transactionManager>
<sqlMap resource="xf/modules/sample/sampleDAO.xml"/>
</sqlMapConfig>
Example Source