[ibatis] sqlMapConfig.xml 파일 설정 및 정리
sqlMapConfig.xml 파일 설정 및 정리
SQL Maps는 DataSource, Data Mapper에 대한 설정이나, Thread 관리와 같은 SQL Maps와 다른 옵션에 대한 설정을 하는 sqlMapConfig.xml 을 사용한다.
* sqlMapConfig.xml 사용의 예
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE sqlMapConfig PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN" "http://www.ibatis.com/dtd/sql-map-config-2.dtd"> <sqlMapConfig> <settings enhancementEnabled="true" maxTransactions="5" maxRequests="32" maxSessions="10" useStatementNamespaces="true"/> <sqlMap resource="com/test/testSQL.xml" /> </sqlMapConfig> |
sqlMapConfig.xml 에 사용하는 태그의 종류는 다음과 같다.
① <?xml version="1.0" encoding="UTF-8"?> : xml 파일 선언 (필수)
② <!DOCTYPE sqlMapConfig PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN"
"http://www.ibatis.com/dtd/sql-map-config-2.dtd">
: sqlMapConfig.xml 의 형식을 정의하는 sql-map-config2.dtd 선언 (필수)
③ <sqlMapConfig> : XML 헤더 (필수)
④ <properties> : 명시된 프로퍼티 에서 변수 값을 가져온다.
⑤ <settings> : 트랜잭션 관리 및 sqlMapClient 상세 제어
⑥ <typeAlias> : 긴 전체 경로를 포함한 클래스명을 짧은 이름으로 사용하기 위한 별칭 지정
⑦ <transactionManager><dataSource> : SimpleDataSource를 이용해 SQL Map을 사용하기 위한 데이터소스 설정
⑧ <sqlMap> : sqlMapConfig에 의해 로드되는 모든 SQL Map 파일을 가져온다.
(1) <properties> 요소
properties 파일을 읽어 변수 값을 사용할 데 사용한다.
<properties resource = "file:conf/jdbc.properties"/>
con/jdbc.properties 파일을 읽어 property 들을 가져온다.
읽어온 property 들은 다음과 같이 사용할 수 있다.
<property name="JDBC.DRIVER" value="${driver}"/>
위와 같이 사용하면 jdbc.properties 에 있는 driver 의 내용을 가져와 대입할 수 있다.
(2) <settings> 요소
sqlMapClient 인스턴스를 위해 다양한 옵션과 최적화를 설정한다.
<settings
cacheModelsEnabled="true"
enhancementEnabled="true"
lazyLoadingEnabled="true"
maxRequests="128"
maxSession="10"
maxTransaction="5"
useStatementNamespaces="false"
/>
옵션 | 설명 | 사용 예 | Default |
maxRequests | 동시에 SQL 문을 수행할 수 있는 Thread의 개수이다. 셋팅 값보다 많은 Thread는 다른 Thread가 수행을 완료할때까지 블록된다. 최소한 10개의 maxTransactions 이고 언제나 maxSession과 maxTransactions보다 크다. 최대치를 줄이면 성능향상이 되는 경우가 있다. | maxRequests="256" | 512 |
maxSessions | 이것은 주어진 시간동안 활성화될 수 있는 session의 갯수이다. session은 명시적으로 주어질 수도 있고 프로그램적으로 요청도리 수도 있고 Thread가 sqlMapClient 인스턴스를 사용할때마다 자동적으로 생성될 수도 있다. 이 값은 항상 maxTransaction 보다 같거나 커야 하고 maxRequests보다 작아야 한다. maxSession 값의 최대치를 줄이면 전체적인 메모리 사용량을 줄일 수 있다. | maxSession="64" | 128 |
maxTransactions | 이것은 한꺼번에 sqlMapClient.startTransaction()에 들어갈 수 있는 Thread의 최대 갯수이다. 셋팅값보다 많은 Thread는 다른 Thread가 나올때까지 블록된다. 이 값은 언제나 maxSessions보다 작거나 같아야 하고 maxRequests보다 작아야 한다. maxTransaction의 최대치를 줄이면 성능향상이 되는 경우가 있다. | maxTransactions="16" | 32 |
cacheModelsEnabled | 이 값은 sqlMapClient 를 위한 모든 캐쉬모델을 가능하게 하거나 가능하지 않게 한다. 디버깅시 도움이 된다. | cacheModelsEnabled ="true" | true |
lazyLoadingEnabled | 이 값은 sqlMapClient를 위한 lazy 로딩을 가능하게 하거나 가능하지 않게 한다. 디버깅시 도움이 된다. | lazyloadingEnabled ="true" | true |
enhancementEnabled | 이 값은 향상된 lazy 로딩처럼 최적화된 자바빈즈 속성 접근을 위해 런타임시 바이트코드 향상을 가능하게 한다.
| enhancementEnabled ="true" | false |
useStatementNamespaces | 이 값을 true로 셋팅하면 sqlmap 이름과 statement 이름으로 구성된 전체 이름으로 매핑된 statement를 참조해야 한다. ex> queryForObject("sqlMapName.statementName"); | useStatementNamespaces ="false" | false |
(3) <typeAlias> 요소
긴 전체 경로를 포함한 클래스명을 참조하기 위한 짧은 이름을 명시한다.
<typeAlias alias="shortname" type="com.test.Class"/>
SQL Maps 설정 파일에서 사용되는 미리 정의된 몇몇 alias가 있다.
Transaction Manager Aliases | |
JDBC JTA EXTERNAL | com.ibatis.sqlmap.engine.transaction.jdbc.JdbcTransactionConfig com.ibatis.sqlmap.engine.transaction.jta.JtaTransactionConfig com.ibatis.sqlmap.engine.transaction.external.ExternalTransactionConfig |
Data Source Factory Aliases | |
SIMPLE DBCP JNDI | com.ibatis.sqlmap.engine.datasource.SimpleDataSourceFactory com.ibatis.sqlmap.engine.datasource.DbcpDataSourceFactory com.ibatis.sqlmap.engine.datasource.JndiDataSourceFactory |
(4) <transactionManager> 요소
<transactionManager> 는 SQL Maps를 위한 트랜잭션 관리를 설정하도록 한다. type 속성값 트랜잭션 종류를 표시한다.
type 값의 종류
- JDBC : Connection commit()과 rollback() 메소드를 통해 트랜잭션을 제어하기 위한 JDBC를 사용한다.
- JTA : 이 트랜잭션관리자는 SQL Maps가 다른 데이터베이스나 트랜잭션 자원을 포함하는 더욱더 넓은 범위의 트랜잭션을 포함하도록 하는 JTA 전역트랜잭션을 사용한다. 이 설정은 JNDI 자원으로부터 사용자 트랜잭션을 위치시키기 위한 UserTransaction 속성값을 필요로 한다.
- EXTERNAL : 이것은 트랜잭션을 스스로 관리하도록 한다. 이것은 애플리케이션이 SQL Maps의 트랜잭션을 관리하게 하며 비 트랜잭션 데이터베이스에 유용하다.
<transactionManager> 는 <dataSource> 요소를 가지며 <dataSource> 는 SimpleDataSourceFactory, DbcpDataSourceFactory, JndiDataSourceFactory 에 따라 설정 방식을 구분한다.
* SimpleDataSourceFactory
SimpleDataSource는 데이터소스를 제공하는 컨테이너가 없는 경우 connection을 제공하기 위해 기본적으로 pooling 데이터소스 구현을 제공한다. 이것은 iBATIS SimpleDataSource connection pooling을 기반으로 한다.
<transactionManager type="JDBC">
<dataSource type ="SIMPLE">
<property name="JDBC.Driver" value="org.postgresql.Driver"/>
<property name="JDBC.ConnectionURL" value="jdbc:postgresql://server:5432/dbname"/>
<property name="JDBC.Username" value="user"/>
<property name="JDBC.Password" value="password"/>
<!-- OPTIONAL PROPERTIES BELOW-->
<property name="Pool.MaximumActiveConnections" value="10"/>
<property name="Pool.MaximumIdelConnections" value="5"/>
<property name="Pool.TimeToWait" value="10000"/>
<property name="Pool.PingQuery" value="select * from dual"/>
<property name="Pool.PingEnabled" value="false"/>
<property name="Pool.PingConnectionsOlderThan" value="0"/>
<property name="Pool.PingConnectionsNotUsedFor" value="0"/>
</dataSource>
</transactionManager>
* DbcpDataSourceFactory
DbcpDataSourceFactory는 DataSource API를 통해 connection pooling 서비스를 제공하기 위해 DBCP를 사용한다.
이 DataSource는 어플리케이션/웹 컨테이너가 DataSource 구현물을 제공하지 못하거나 standalone 어플리케이션을 구동할 때 이상적이다.
<transactionManager type="JDBC">
<dataSource type ="DBCP">
<property name="JDBC.Driver" value="${driver}"/>
<property name="JDBC.ConnectionURL" value="${url}"/>
<property name="JDBC.Username" value="${username}"/>
<property name="JDBC.Password" value="${password}"/>
<!-- OPTIONAL PROPERTIES BELOW-->
<property name="Pool.MaximumActiveConnections" value="10"/>
<property name="Pool.MaximumIdelConnections" value="5"/>
<property name="Pool.MaximumWait" value="60000"/>
<!-- Use of the validation query can be problematic. If you have difficulty, try without it -->
<property name="Pool.ValidationQuery" value="select * from ACCOUNT"/>
<property name="Pool.LogAbandoned" value="false"/>
<property name="Pool.RemoveAbandoned" value="false"/>
<property name="Pool.RemoveAbandonedTimeout" value="50000"/>
<property name="Driver.DriverSpecificProperty" value="SomeValue"/>
</dataSource>
</transactionManager>
* JndiDataSourceFactory
JndiDataSourceFactory 는 어플리케이션 컨테이너내 JNDI 컨텍스트로부터 DataSource 구현물을 가져와야 한다. 이것은 어플리케이션 서버를 사용중이고 컨테이너 관리 connection pool 과 DataSource 가 제공될 때 사용한다.
JDBC DataSource 구현물에 접근하기 위한 표준적인 방법은 JNDI 컨텍스트를 통하여 접근하는 것이다.
<transactionManager type="JDBC">
<dataSource type ="JNDI">
<property name="DBJndiContext" value="java:comp/env/jdbc/jpetstore"/>
</dataSource>
</transactionManager>
<transactionManager type="JTA">
<property name="UserTransaction" value="java:/ctx/con/UserTransaction"/>
<dataSource type ="JNDI">
<property name="DBJndiContext" value="java:comp/env/jdbc/jpetstore"/>
</dataSource>
</transactionManager>
(5) <sqlMap> 요소
<sqlMap> 요소는 명시적으로 SQL Map이나 다른 SQL Map 설정파일을 포함할 때 사용한다.
sqlMapClient 인스턴스에 의해 사용되는 각각의 SQL Map XML 파일은 반드시 선언되어야 한다.
<sqlMap resource="com/test/sql/Test1.xml"/>
<sqlMap resource="com/test/sql/Test2.xml"/>
<sqlMap resource="com/test/sql/Test3.xml"/>
또는
<sqlMap url="file:///c:/config/Test1.xml"/>
출처: https://hyeonstorage.tistory.com/278?category=549765 [개발이 하고 싶어요]
'Java 관련 > MyBatis, iBatis' 카테고리의 다른 글
[ibatis] resultMap의 property 속성 옵션 정리 (0) | 2019.10.07 |
---|---|
[ibatis] parameterMap의 property 속성 옵션 정리 (0) | 2019.10.07 |
[ibatis] resultClass, resultMap 사용 기본 (0) | 2019.10.07 |
[ibatis] parameterClass, parameterMap 사용 기본 (0) | 2019.10.07 |
[ibatis] <procedure> call 사용 (0) | 2019.10.07 |
[ibatis] 자동생성키 <selectKey> 사용 정리 (채번, Sequence) (0) | 2019.10.07 |
[ibatis] sqlMap XML 파일의 기본 구조 (0) | 2019.10.07 |
[ibatis] iBATIS Data Mapper 프레임워크 소개 (0) | 2019.10.07 |