SOL Maps(com.ibatis.sqlmap.*)
- 프로그래머에게 자바빈즈를 PreparedStatement파라미터와 ResultSets로 쉽게 맵핑할수 있도록 해줌.
- 작동방법
1.파라미터(자바빈즈 , Map 또는 원시래퍼)로써 객체를 제공
2. 맴핑된 Statement를 실행한다.
SQL Maps 프레임워크의 하는일의 다이어 그램
- 설치
ibatis-common.jar, ibatis-sqlmap.jar , ibatis-dao.jar를 클래스 패스에 두면됨.
-버젼 update
프로그램에 종속되지 않기 때문에 jar 파일만 바꾼다면 문제가 되지 않을 듯 싶다.
-SQL Map xml 설정파일
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>
<!-- DB 연결정보 설정 프로퍼티 파일
-->
<properties resource="실제 경로/db.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="${user}"/>
<property name="JDBC.Password"
value="${password}"/>
</dataSource>
</transactionManager>
<sqlMap resource="실제경로/MemberSql.xml"/>
<!--
more here...
<sqlMap resource="????.xml"/>
-->
</sqlMapConfig>
|
위 와 같은 내용이 sqlMapConfig 파일에 들어갈 수 있다.
1.<properties> 요소
- DB 연결정보를 가지고 있는 properties 파일이다.
- 사용방법
driver=org.hsqldb.jdbcDriver => <property name="JDBC.Driver"
value="${driver}"/>
2.<settings> 요소
- xml파일을 빌드하는 SqlMapClient 인터페이스를 위한 다양한 옵셥과 최적화를 설정함
| 요소명 |
설명 |
| maxRequests |
SQL 문을 수행할수 있는 스레드 수
maxSessions,maxtransactions< maxRequests
|
| maxSessions |
주어진 시간동안 활성될 수 있는 세션의수
maxTransaction <maxSessions< maxRequests
|
| maxTransactions |
sqlMapClient.startTransaction()에 들어갈수 있는 스레드 최대갯수
maxSessions >=maxTransactions
maxRequests>maxTransactions
|
| cacheModelsEnabled |
모든 캐쉬 모델을 가능하게 하거나 가능하지 않게 한다.(디버깅시 도움) |
| lazyLoadingEnabled |
모든 늦은(lazy)로딩을 가능하게 하거나 가능하지 않게 한다.(디버깅시 도움) |
| enhancementEnabled |
향상된 늦은(lazy)로딩처럼 최적화된 자바빈즈 속성접근을 휘해 런타임시 바이트코드 향상 |
3.<typeAlias>요소
- DTO클래스의 전제척인 클래스명을 참조하기 위한 짧은 이름을 명시한다.(returnClass 속성에 풀패키명을 적어주지 않아도
된다.)
4.<transactionManager>요소( ${} - >properties 값을 쓴다.)
- 트랜잭션 관리를 설정하도록함.
- type 속성 : JDBC , JTA , EXTERNAL
| type 속성 |
설명 |
| JDBC |
Connction commit(),rollback() 메소드를 통해 트랜잭션을 제어하기 위한 JDBC |
| JTA |
JTA전역 트랜잭션을 사용(다른 데이터 베이스나 트랜잭션 자원을 포함하는 더욱더 넓은 범위의 트랙잰션 표함) |
| EXTERNAL |
자신이 트랜잭션을 관리하도록한다. 읽기전용 데이터베이스에 유용하다. |
5.<dataSource>요소
- 트랜잭션관리자 설정의 포함된 부분
<transactionManager>
<dataSource ...>
</dataSource>
</transactionManager>
| type 속성 |
설명 |
| SIMPLE |
- iBaits SimpleDataSource connection 풀링을 기초로함
- 사용방법
<transactionManager type="JDBC">
<dataSource
type="SIMPLE">
<property name="JDBC.Driver"
value="${driver}"/>
<property name="JDBC.ConnectionURL"
value="${url}"/>
<property name="JDBC.Username"
value="${user}"/>
<property name="JDBC.Password"
value="${password}"/>
<property name="Pool.MaximumActiveConnctions"
value="10"/>
<property name="Pool.MaximumIdleConnections"
value="10"/>
<property name="Pool.MaximumCheckoutTime"
value="10"/>
<property name="Pool.TimeToWait"
value="1000"/>
<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>
|
| DBCP |
- DataSourcr API를 통한 Connection 풀링 제공하기 위해 Jakarta DBCP(Database Connection
Pool)를 사용
- 사용방법
<transactionManager type="JDBC">
<dataSource
type="DBCP">
<property name="JDBC.Driver"
value="${driver}"/>
<property name="JDBC.ConnectionURL"
value="${url}"/>
<property name="JDBC.Username"
value="${user}"/>
<property name="JDBC.Password"
value="${password}"/>
<property name="Pool.MaximumActiveConnctions"
value="10"/>
<property name="Pool.MaximumIdleConnections"
value="10"/>
<property name="Pool.Maximumait"
value="6000"/>
<property name="Pool.ValidationQuery"
value="select * from ACCOUT"/>
<property name="Pool.LogAbandoned"
value="false"/>
<property name="Pool.RemoveAbandoned"
value="false"/>
<property name="Pool.RemoveAbandonedTimeout"
value="5000"/>
</dataSource>
</transactionManager>
|
| JNDI |
- JndiDataSourceFactory는 JNDI를 통해 DataSource에 접근하는 기능 제공
- 일반적인 JDBC트랜잭션 관리
- 사용방법
<transactionManager type="JDBC">
<dataSource
type="JNDI">
<property name="DataSource"
value="java:comp/env/jdbc/jpetstore"/>
</dataSource>
</transactionManager>
|
|
- 전역 트랜잭션을 설정한다.
- 사용방법
<transactionManager type="JTA">
<property name="UserTransaction"
value="java:/ctx/con/UserTransaction"/>
<dataSource
type="JNDI">
<property name="DataSource"
value="java:comp/env/jdbc/jpetstore"/>
</dataSource>
</transactionManager>
|
6. <sqlMap>요소
- 명시적으로 SOL Map 이나 다른 SQL Map 설정파일을 포함할때 사용
- SqlMapClient 인스턴스에 의해 사용되는 각각의 SQL Map XML 파일은 반드시 선언되어야함.
<!--classpath Resources 클래스 패스다음 경로부터 -->
<sqlMap resource="실제경로/MemberSql.xml"/>
<!--URl resources-->
<sqlMap
url="file:///c:/config/MemberSql.xml"/>
///////////////////////////////////////////////////////////////////////////////////////////
SqlMapConfig.xml의 핵심은
1. URL등 정보를 가지고 있음 - java 코딩에 매번 반복되던 정보를 가지고 있다.
2. sqlMap의 정보를 가지고 있다.