SPRING
2016.03.03 / 19:05

Spring - SpringMVC + iBatis »ç¿ëÇϱâ(½ºÇÁ¸µ¿¡¼­ Áö¿øÇÏ´Â template »ç¿ëÇϱâ)

dwsi
Ãßõ ¼ö 322

ÀüüÀûÀ¸·Î iBatisÀÇ ±âº»¼³Á¤Àº Å©°Ô ¹Ù²îÁö ¾Ê´Â´Ù. ´Ù¸¸ SpringFramework´Â DI¸¦ Áö¿øÇϱ⠶§¹®¿¡ ÀÌ ¼³Á¤¸¸ µé¾î°¡°Ô µÇ¸é ´Ù¸¥°Ô ¾ø´Ù.

1.web.xml ÀÇ context-param ºÎºÐ¿¡ ibatisÀÇ ¼³Á¤ÀÌ µé¾î°¡ ÀÖ´Â xml ÆÄÀÏÀÇ À§Ä¡¸¦ Á¤ÇØÁØ´Ù.
<context-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>
   /WEB-INF/config/applicationContext.xml,
   /WEB-INF/config/applicationContext-iBatis.xml
  </param-value>
 </context-param>

2. applicationContext-iBatis.xml ÆÄÀÏ¿¡ DataSource¸¦ ¼³Á¤ÇÏ°í DataSource¸¦ »ç¿ëÇÏ´Â sqlMapClient,sqlMapClient¸¦ »ç¿ëÇÏ´Â template¸¦ ¸¸µç´Ù.
template¸¦ »ç¿ëÇϱâ À§Çؼ­´Â spring-orm.jar ÆÄÀÏÀ» ¶óÀ̺귯¸®¿¡ Ãß°¡ÇØ¾ß ÇÑ´Ù.

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
  <property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
  <property name="url" value="jdbc:oracle:thin:@localhost:1521:XE"/>
  <property name="username" value="user01"/>
  <property name="password" value="user01"/>
  <property name="initialSize" value="10"/>
  <property name="maxActive" value="100"/>
  <property name="maxIdle" value="16"/>
  <property name="maxWait" value="2000"/>
 </bean>
 
 <bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
  <property name="configLocation" value="WEB-INF/config/sqlMapConfig.xml" />
  <property name="dataSource" ref="dataSource" />
 </bean>
 
 <bean id="template" class="org.springframework.orm.ibatis.SqlMapClientTemplate">
     <property name="sqlMapClient" ref="sqlMapClient"/>
 </bean>

À§ÀÇ Datasource¸¦ ±¸Çö¹æ¹ýÀº DBCP¸¦ »ç¿ëÇÏ´Â ¹æ¹ýÀ̱⠶§¹®¿¡ www.apache.org ¿¡ µé¾î°¡¼­ commonms --> dbcp ¿¡¼­ ´Ù¿î ¹ÞÀº ¶óÀ̺귯¸®¸¦ Ãß°¡ÇÏ¿©¾ß »ç¿ëÇÒ ¼ö ÀÖ´Ù.


3. sqlMapClient¸¦ »ç¿ëÇϱâ À§Çؼ­ ·ÎµùÇÑ configLocationÀÎ 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>
    <settings
  cacheModelsEnabled="true"
  enhancementEnabled="true"
  lazyLoadingEnabled="true"
  maxRequests="32"
  maxSessions="10"
  maxTransactions="5"
  useStatementNamespaces="true"
 />
 
  <sqlMap resource="kr/co/springboard/dao/sqlmap/sqlMapBoard.xml"/>
</sqlMapConfig>

4. À§ÀÇ »¡°£»öÀÇ sqlMapBoard.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>
 <typeAlias alias="Board" type="kr.co.springboard.dto.BoardDTO"/>
 <resultMap class="Board" id="boardResult">
  <result property="seq" column="SEQ"/>
  <result property="category" column="CATEGORY"/>
  <result property="title" column="TITLE"/>
  <result property="readCount" column="READ_COUNT"/>
  <result property="writer" column="WRITER"/>
  <result property="regDate" column="REG_DATE"/>
 </resultMap>
 
 <resultMap class="Board" id="boardFullResult">
  <result property="seq" column="SEQ"/>
  <result property="category" column="CATEGORY"/>
  <result property="title" column="TITLE"/>
  <result property="readCount" column="READ_COUNT"/>
  <result property="writer" column="WRITER"/>
  <result property="regDate" column="REG_DATE"/>
  <result property="contents" column="CONTENTS"/>
 </resultMap>
 
 <select id="selectBoardTotalCount" resultClass="int">
  SELECT COUNT(0)
  FROM MY_BOARD
 </select>
 
 <select id="selectBoardList" parameterClass="Board" resultMap="boardResult">
  <![CDATA[
  select 
   *
  from 
   (
   select * 
   from 
    ( select * from MY_BOARD order by SEQ ASC )
   where rownum <= #startNum#
   order by SEQ desc 
   )
  where rownum <= #countPerPage#
  ]]>
 </select>
 
 <insert id="insertBoard" parameterClass="Board">
  INSERT INTO
   MY_BOARD
   (SEQ,CATEGORY,TITLE,WRITER,REG_DATE,READ_COUNT,CONTENTS)
  VALUES
   (MY_BOARD_SEQ.NEXTVAL,#category#,#title#,#writer#,sysdate,0,#contents#)
 </insert>
 
 <select id="selectBoardItem" parameterClass="int" resultMap="boardFullResult">
  SELECT
   *
  FROM MY_BOARD
  WHERE SEQ=#seq#
 </select>
 
 <update id="updateBoardReadCount" parameterClass="int">
  UPDATE 
   MY_BOARD
  SET
   READ_COUNT = READ_COUNT + 1
  WHERE SEQ = #seq#
 </update>
 
 <update id="updateBoardItem" parameterClass="Board">
  UPDATE
   MY_BOARD
  SET
   CATEGORY = #category#,
   WRITER = #writer#,
   TITLE = #title#,
   CONTENTS = #contents#
  WHERE SEQ = #seq#
 </update>
 
 <delete id="deleteBoardItem" parameterClass="int">
  DELETE
  FROM MY_BOARD
  WHERE SEQ = #seq#
 </delete>
</sqlMap>