1181804571.bmp
MySQL에 만들어둔 Member 테이블에 iBatis를 사용해서 SQL을 날리는 Member.xml에 있는 sql의 ID를 호출하는 SqlmapMemberDao가 상속받고 있는 SqlMapClientDaoSupport에 대해서 조사해 봅니다.

스프링 레퍼런스 12.5
를 참고하면 다음과 같은 표를 볼 수 있습니다.
1363766640.bmp
저는 iBATIS 2,0을 사용하기에 DAO 클래인 SqlmapMemberDao가 SqlMapClientDaoSupport 클래스를 상위 클래스로 상속받도록 했습니다.
1072221328.bmp
그리고 SqlMapClientDaoSupport에서 사용되는 SqlMapClient 객체를 DI(dependency injection)하기 위해 daocontext-member.xml에 다음과 같이 코딩합니다.
1361370266.bmpsqlMapClient 객체는 사용할 SqlMap을 다음과 같이 sql-map-config.xml 에 코딩해 둡니다.
1122443480.bmp여기서 사용하기로 한 Member.xml 파일을 보면 다음과 같습니다.
[#M_ more.. | less.. |
<?xml version=”1.0″ encoding=”UTF-8″?>
<!DOCTYPE sqlMap
PUBLIC “-//iBATIS.com//DTD SQL Map 2.0//EN” “http://www.ibatis.com/dtd/sql-map-2.dtd”&gt;

<sqlMap namespace=”Member”>

   <!– alias –>
   <typeAlias alias=”member” type=”net.webapp2.member.domain.Member” />

   <!– result map –>
   <resultMap id=”memberMap” class=”member”>
       <result property=”id” column=”id” />
       <result property=”name” column=”name” />
       <result property=”messengerId” column=”messengerId” />
       <result property=”email” column=”email” />
       <result property=”blugAddress” column=”blugAddress” />
       <result property=”phone” column=”phone” />
   </resultMap>

   <!– insert –>
   <insert id=”insert” parameterClass=”member”>
       INSERT INTO Member(name, email
       <isNotNull property=”messengerId”>, messengerId</isNotNull>
       <isNotNull property=”phone”>, phone</isNotNull>
       <isNotNull property=”blugAddress”>, blugAddress </isNotNull>)
       VALUES(#name#, #email#
       <isNotNull property=”messengerId”>, #messengerId#</isNotNull>
       <isNotNull property=”phone”>, #phone#</isNotNull>
       <isNotNull property=”blugAddress”>, #blugAddress#</isNotNull>);
   </insert>

   <!– select –>
   <select id=”count” resultClass=”int”>
       SELECT COUNT(id)
       FROM Member;
   </select>

   <select id=”getMember” resultMap=”memberMap”>
       SELECT id, name, messengerId, email, blugAddress, phone
       FROM Member
       WHERE id = #id#;
   </select>

   <select id=”getByName” resultMap=”memberMap”>
       SELECT id, name, messengerId, email, blugAddress, phone
       FROM Member
       WHERE name = #name#;
   </select>

   <select id=”getAllMember” resultMap=”memberMap”>
       SELECT id, name, messengerId, email, blugAddress, phone
       FROM Member;
   </select>

   <!– update –>
   <update id=”update” parameterClass=”member”>
       UPDATE Member
       <dynamic prepend=”SET”>
           <isNotNull property=”name” prepend=”,”>
           name = #name#
           </isNotNull>
           <isNotNull property=”messengerId” prepend=”,”>
           messengerId = #messengerId#
           </isNotNull>
           <isNotNull property=”email” prepend=”,”>
           email = #email#
           </isNotNull>
           <isNotNull property=”blugAddress” prepend=”,”>
           blugAddress = #blugAddress#
           </isNotNull>
           <isNotNull property=”phone” prepend=”,”>
           blugAddress = #blugAddress#
           </isNotNull>
       </dynamic>
       WHERE id = #id#;
   </update>

   <!– delete –>
   <delete id=”deleteById” parameterClass=”int”>
       DELETE from Member WHERE id = #id#
   </delete>

</sqlMap>
_M#]
이렇게 설정파일에 해당하는 iBatis Sql Map 2.0 과 JDBC인 datasource를 SqlMapClientFactoryBean 타입의 객체인 sqlMapClient의 속성으로 DI 시킵니다.
[#M_ more.. | less.. |
<?xml version=”1.0″ encoding=”UTF-8″?>
<beans xmlns=”http://www.springframework.org/schema/beans&#8221;
   xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance&#8221;
   xsi:schemaLocation=”
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd”&gt;

   <!– DataSource –>
   <!– MySQL –>
   <bean id=”dataSource”
       class=”org.apache.commons.dbcp.BasicDataSource”
       destroy-method=”close”>
       <property name=”driverClassName” value=”com.mysql.jdbc.Driver” />
       <property name=”url” value=”jdbc:mysql://localhost:3306/adressbook?autoReconnect=true” />
       <property name=”username” value=”keesun” />
       <property name=”password” value=”keesun” />
   </bean>

   <!– SqlMap setup for iBATIS Database Layer –>
   <bean id=”sqlMapClient”
       class=”org.springframework.orm.ibatis.SqlMapClientFactoryBean”>
       <property name=”configLocation”
           value=”file:conf/sql-map-config.xml” />
       <property name=”dataSource” ref=”dataSource” />
   </bean>

   <!– Transaction Manager –>
   <bean id=”transactionManager”
       class=”org.springframework.jdbc.datasource.DataSourceTransactionManager”>
       <property name=”dataSource” ref=”dataSource” />
   </bean>

</beans>
_M#]
글로 정리하다 보니까 이제 눈에 조금 보이네요.

SqlMapClientDaoSupport라는 클래스에서 SqlMapClient 객체를 사용하기 때문에 이것을 와이어링 해주는데.. SqlMapClieint는 org.springframework.orm.ibatis.SqlMapClientFactoryBean 이 타입이며 SqlMapClientFactoryBean을 정의 할때는 configLocation 이것과 dataSource 를 와이어링 해줘야 한다.

configLocation은 이곳에서 사용할 iBATIS sql map에 대한 정보를 가지고 있는 sql-map-config.xml 파일로 지정해주고 sql-map-config.xml에는 member.xml파일이 지정되어 있고 member.xml은 iBATIS를 사용하고 있다.

datasource는 db connection객체를 생성하기 위한 네 가지 정보에 값을 setting한다.