프로그래머의 삶 Programmer's Life/PersistanceSolution

Spring+iBatis 연동시의 주의점 및 참조예제

Oliver's World 2008. 11. 5. 10:52
728x90

<sqlMap namespace="user-query">
 <typeAlias alias="user" type="user.model.User" />
 <resultMap id="resultUser" class="user">
  <result property="id" column="ID" />
  <result property="password" column="PASSWORD" />
  <result property="name" column="NAME" />
  <result property="ssn" column="SSN" />
  <result property="address" column="ADDRESS" />
  <result property="post" column="POST" />
  <result property="phone" column="PHONE" />
  <result property="email" column="EMAIL" />
  <result property="mileage" column="MILEAGE" />
  <result property="birthday" column="BIRTHDAY" />
  <result property="selected" column="SELECTED" />
  <result property="grade" column="GRADE" />
  <result property="genre" column="GENRE" />
  <result property="favoriteSinger1" column="FAVORITESINGER1" />
  <result property="favoriteSinger2" column="FAVORITESINGER2" />
 </resultMap>

 

위와같이 사용한 것 처럼 column 은 대문자로 명시(소문자도 상관이 없긴하지만 Look and Feel!!.....T^T) 특히 이놈도 상당히 예민한지라...오타 같은것에 주의할 것을 요한다.

 

 <insert id="UserInsert" parameterClass="user">
  INSERT INTO TEST(ID,PASSWORD,NAME,SSN,ADDRESS,POST,PHONE,EMAIL,MILEAGE,GRADE) values(#id#,#password#,#name#,#ssn#,#address#,#post#,#phone#,#email#,#mileage#,#grade#)
 </insert>

 

 <select id="UserSelect" resultMap="resultUser">
  SELECT * FROM TEST WHERE id = #id#
 </select>

 

 <select id="UserSelectAll" resultMap="resultUser">
  SELECT * FROM TEST
 </select>

 

 <delete id="UserDelete" parameterClass="user">
  DELETE FROM TEST WHERE id =#id#
 </delete>

 

 <update id="UserUpdate" parameterClass="user">
  UPDATE TEST SET ID=#id#,PASSWORD=#password#,NAME=#name#,SSN=#ssn#,ADDRESS=#address#,POST=#post#,PHONE=#phone#,EMAIL=#email#,MILEAGE=#mileage#,GRADE=#grade# WHERE ID=#id#
 </update>

 

위와같이 쿼리 를 사용할 경우 공백으로 두었을때 eclipse 에서 보이지 않는 문자가 쓰여져있을 경우 Exception 이 뜬다.

이럴경우에는 당연히 <select>select * from test</select>

쿼리문과 <select></select> 사이의 공백을 제거해 준후에

보기 좋은 상태로 엔터를 치면 해결된다.

그리고 쿼리실행시

getSqlMapClientTemplate().update("UserUpdate", user);

와 같이 iBatis 설정 xml 파일의 각 쿼리의 id로서 쿼리를 불러서 실행한다.

.....SqlMapClinetTemplate() 실행시에는  xml 파일에 설정(아래의

<..-servlet> 의 내용) 및 구현 메소드에서는 SqlMapClientDaoSupport 를 extends 하여 사용하여야 한다. 그리고 org.springframework.orm.ibatis.support.SqlMapClientDaoSupport 을 import 하여야 한다.

 

 

<..-servlet>

 <!-- ibatis 설정 -->

 <bean id="userDAO" class="user.dao.UserDAOImpl">
  <property name="sqlMapClientTemplate"
   ref="sqlMapClientTemplate" />
 </bean>
 
 <!-- ibatis 설정 끝-->

 <bean id="sqlMapClientTemplate"
  class="org.springframework.orm.ibatis.SqlMapClientTemplate">
  <property name="sqlMapClient">
   <ref bean="sqlMapClient" />
  </property>
 </bean>

 <bean id="sqlMapClient"
  class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
  <property name="dataSource" ref="dataSource" />
  <property name="configLocation"
   value="/WEB-INF/SqlMapConfig.xml" />
 </bean>

 <bean id="dataSource"
  class="org.apache.commons.dbcp.BasicDataSource"
  destroy-method="close">
  <property name="driverClassName">
   <value>oracle.jdbc.driver.OracleDriver</value>
  </property>
  <property name="url">
   <value>jdbc:oracle:thin:@localhost:1521:MENGINE</value>
  </property>
  <property name="username">
   <value>mengine</value>
  </property>
  <property name="password">
   <value>mengine</value>
  </property>
 </bean>

 

 

대게 오타 및 컬럼과 프로퍼티(프로그램내에서 정의된 model..DTO) 와의 매핑에서 문제가 생기므로 주의할 것을 요한다.

728x90