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
Posted by 피곤키오
,