<%@ 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