iBatis Framework의 구성

수행과정
1. 파라미터로서의 객체를 제공한다(자바빈,MAP, 원시래퍼[String, Integer, etc... ]),
- 파라미터 객체는 쿼리문 내의 입력값을 셋팅하거나 where절을 셋팅하기 위해 사용된다
2. 매핑된 statement실행
- Data Mapper프레임웤은 PreparedStatment인스턴스생성
- 제공된 파라미터객체를 이용해 파라미터 설정
- statement실행
- ResultSet으로 부터 결과 객체 생성
3. update의 경우 영향을 받은 row수 반환
4. select문일 경우 한개의 객체 또는 컬렉션 객체 반환
- 결과객체의 타입은 파라미터 객체와 같은 타입이 될수 있다
SqlMapConfig.xml 파일
데이터소스에 대한 설정, 쓰레드 관리와 같은 SQL Maps와 다른 옵션에 대한 설정을 제공하는 중앙집중적인 XML 설정 파일.
SIMPLE 방식
db.properties
driver = com.mysql.jdbc.Driver url = jdbc:mysql://127.0.0.1:3306/struts username = scott password = tiger |
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="db.properties"/> <settings cacheModelsEnabled="true" enhancementEnabled="true" lazyLoadingEnabled="false" useStatementNamespaces="false" /> <transactionManager type="JDBC" commitRequired="false"> <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> </transactionManager> <sqlMap resource= "Product.xml"/> </sqlMapConfig> |
JNDI 방식
context.xml
<?xml version="1.0" encoding="euc-kr"?> <Context> <Resource name="jdbc/StrutsDB" auth="Container" type="javax.sql.DataSource" username="scott" password="tiger" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://127.0.0.1:3306/struts" maxActive="5" maxIdle="3"/> </Context> |
SqlMapConfig.xml
… <transactionManager type="JDBC"> <dataSource type="JNDI"> <property name="DataSource" value="java:comp/env/jdbc/StrutsDB"/> </dataSource> </transactionManager> … |
내장 별칭 – 트랜잭션 매니저
별칭 |
Fully Qualified Class Name |
JDBC |
com.ibatis.sqlmap.engine.transaction.jdbc.JdbcTransactionConfig |
JTA |
com.ibatis.sqlmap.engine.transaction.jta.JtaTransactionConfig |
EXTERNAL |
com.ibatis.sqlmap.engine.transaction.external.ExternalTransactionConfig |
내장 별칭 – 데이터 타입
별칭 |
Fully Qualified Class Name |
string |
java.lang.String |
byte |
java.lang.Byte |
long |
java.lang.Long |
short |
java.lang.Short |
int |
java.lang.Integer |
double |
java.lang.Double |
float |
java.lang.Float |
boolean |
java.lang.Boolean |
decimal |
java.math.BigDecimal |
object |
java.lang.Object |
map |
java.util.Map |
hashmap |
java.util.HashMap |
list |
java.util.List |
arraylist |
java.util.ArrayList |
collection |
java.util.Collection |
iterator |
java.util.Iterator |
내장 별칭 – 데이터소스 팩토리 타입
별칭 |
Fully Qualified Class Name |
SIMPLE |
com.ibatis.sqlmap.engine.datasource.SimpleDataSourceFactory |
DBCP |
com.ibatis.sqlmap.engine.datasource.DbcpDataSourceFactory |
JNDI |
com.ibatis.sqlmap.engine.datasource.JndiDataSourceFactory |
내장 별칭 – 캐시 컨트롤러 타입
별칭 |
Fully Qualified Class Name |
FIFO |
com.ibatis.sqlmap.engine.cache.fifo.FifoCacheController |
LRU |
com.ibatis.sqlmap.engine.cache.Iru.LruCacheController |
MEMORY |
com.ibatis.sqlmap.engine.cache.memory.MemoryCacheController |
OSCACHE |
com.ibatis.sqlmap.engine.cache.OSCacheController |
내장 별칭 – XML결과 타입
별칭 |
Fully Qualified Class Name |
Dom |
com.ibatis.sqlmap.engine.type.DomTypeMarker |
domCollection |
com.ibatis.sqlmap.engine.type.DomCollectionTypeMarker |
Xml |
com.ibatis.sqlmap.engine.type.XmlTypeMarker |
XmlCollection |
com.ibatis.sqlmap.engine.type.XmlCollectionTypeMarker |
Sql Map xml파일
Product.xml
<?xml version="1.0" encoding="UTF- 8" ?> <!DOCTYPE sqlMap PUBLIC "- / / ibatis.apache.org/ /DTD SQL Map 2.0/ /EN" "http:/ / ibatis.apache.org/dtd/sql- map- 2.dtd"> <sqlMap id=”Product”> <cacheModel id=”productCache” type=”LRU”> <flushInterval hours=”24”/> <property name=”size” value=”1000” /> </cacheModel> <typeAlias alias=”product” type=”com.ibatis.example.Product” /> <parameterMap id=”productParam” class=”product”> <parameter property=”id”/> </parameterMap> <resultMap id=”productResult” class=”product”> <result property=”id” column=”PRD_ID”/> <result property=”description” column=”PRD_DESCRIPTION”/> </resultMap> <select id=”getProduct” parameterMap=”productParam” resultMap=”productResult” cacheModel=”product- cache”> select * from PRODUCT where PRD_ID = ? </select> </sqlMap> |
Statement 타입
Statement Element |
Attributes |
Child Elements |
Methods |
<statement> |
id parameterClass resultClass listClass parameterMap resultMap cacheModel |
All dynamic elements |
Insert Update Delete All query methods |
<insert> |
id parameterClass parameterMap |
All dynamic elements <selectKey> <generate> |
Insert Update Delete |
<update> |
id parameterClass parameterMap extends |
All dynamic elements <generate> |
Insert Update Delete |
<delete> |
id parameterClass parameterMap extends |
All dynamic elements <generate> |
Insert Update Delete |
<select> |
id parameterClass resultClass listClass parameterMap resultMap cacheModel extends |
All dynamic elements <generate> |
All query methods |
<procedure> |
id parameterMap resultClass resultMap cacheModel |
All dynamic elements |
Insert Update Delete All query methods |
iBatis에서 처리가능한 데이터 타입
- Bean, Map, Primitive, XML
- 대부분의 경우 Bean, Map이 가장 많이 사용된다.
|
장점 |
단점 |
Bean |
성능 컴파일 시 타입 및 이름 검사 형변환이 줄어듬 |
코드량 증가 |
Map |
코드량 감소 |
느림 컴파일시 검사하지 않음 오류가 실행 시 체크됨 잦은 형 변환 |
파라미터 처리 – 인라인 파라미터
- 인라인 파라미터
# propertyName# # propertyName:jdbcType# # propertyName:jdbcType:nullValue# |
- 대개는 jdbcType이나 nullValue값에 대해 명시하지 않고 프로퍼티명만 명시해주는 방법을 사용
Director.xml
… <select id="selectDirectorById1" resultMap="DirectorResultMap1" parameterClass="string"> select * from director Director.xml where director_id = # value# </select> … |
파라미터 처리 – 외부 파라미터 맵
- 인라인 파라미터 매핑과 동일한 기능을 제공하면서 SQL Map 적재시 속도가 빨라지고 유지보수가 용이하다.
- 파라미터에 관련된 사항을 중앙집중적으로 관리 가능하게 해준다.
Director.xml
<parameterMap class="Director" id="DirectorParameterMap"> <parameter property="id" javaType="string" jdbcType="varchar"/> <parameter property="name" javaType="string" jdbcType="varchar"/> <parameter property="age" javaType="int" jdbcType="int"/> <parameter property="winnerCount" javaType="int" jdbcType="int" nullValue="0"/> </parameterMap> <insert id="insertDirector2" parameterMap="DirectorParameterMap"> insert into director( director_id, director_name, director_age, director_winnerCount ) values(?,?,?,?) </insert> |
결과 데이터 처리 – 인라인 결과 맵
- 간단하고 쉽게 사용할 수 있다.
- 프레임워크에 의해 자동 매핑 되어진다.
- 런타임시 오류 발생할 확률이 높다.
Director.xml
<select id="selectDirectorCount" resultClass="int"> select count(*) as value from director </select> <select id="selectDirectorById" resultClass="Director" parameterClass="string"> select director_id as id, director_name as name, director_age as age, director_winnerCount as winnerCount from director where director_id = #value# </select> |
결과 데이터 처리 – 외부 결과 맵
- 외부 파라미터 맵 처럼 객체의 프로터피와 SQL 결과의 컬럼명을 설정하고 각각의 데이터 타입 지정 및 null값에 대한 처리가 가능하다.
- 좀 더 나은 성능 및 유지보수가 용이하다.
Director.xml
<resultMap class="Director" id="DirectorResultMap2"> <result property="id" column="director_id" javaType="String" jdbcType="varchar"/> <result property="name" column="director_name" javaType="String" jdbcType="varchar"/> <result property="age" column="director_age" javaType="int" jdbcType="int"/> <result property="winnerCount" column="director_winnerCount" javaType="int" jdbcType="int" nullValue="0"/> </resultMap> <select id="selectDirectorById2" resultMap="DirectorResultMap2" parameterClass="string"> select * from director where director_id = #value# </select> |
'개발자 센터 > iBatis' 카테고리의 다른 글
간결한 데이터 매퍼의 대명사, iBATIS SQLMaps 활용법 (0) | 2009.12.13 |
---|---|
iBatis 에서 페이징하는 방법 (0) | 2009.12.13 |
iBatis 참고 사이트 (0) | 2009.12.13 |
iBatis SqlMapClient API (1) | 2009.12.13 |
iBatis Framework (0) | 2009.12.13 |