Integrating iBatis with Spring on Web Application

ibatis-config.xml:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE sqlMapConfig
PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN"
"http://www.ibatis.com/dtd/sql-map-config-2.dtd">
<!-- Always ensure to use the correct XML header as above! -->
<sqlMapConfig>

   <settings
      cacheModelsEnabled="true"
      enhancementEnabled="true"
      lazyLoadingEnabled="true"
      maxRequests="128"
      maxSessions="24"
      maxTransactions="12"
      defaultStatementTimeout="60"
      useStatementNamespaces="true"
   />

   <!-- path is started from classpath (WEB-INF/classes/) -->
   <sqlMap resource="sqlmap/sqlmap-config.xml" />
</sqlMapConfig>


sqlmap-config.xml:

<?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">
<sqlMap namespace="notification">

   <typeAlias alias="notification" type="com.domain.Notification" />

   <!-- Defines result mapping -->
   <resultMap id="notificationResult" class="notification">
      <result property="id" column="id" />
      <result property="deleted" column="deleted" />
      <result property="description" column="description" />
      <result property="level" column="level" />
      <result property="time" column="time" />
  </resultMap>

  <statement id="insertNotification" parameterClass="notification">
      insert into NOTIFICATION
         (id, deleted, description, level, time)
      values
         (#id#, #deleted#, #description#, #level#, #time#)
   </statement>

   <!-- Declares getTrade query -->
   <select id="findNotificationById" parameterClass="long" resultMap="notificationResult">
      SELECT * FROM NOTIFICATION WHERE id = #id#
   </select>

   <update id="deleteNotification" parameterClass="long">
      UPDATE NOTIFICATION SET deleted = true WHERE id = #id#
   </update>
</sqlMap>

spring-context.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xsi:schemaLocation="
           http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
           http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
           http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
           http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd"
       default-lazy-init="true">

   <!--Enable Spring Controller Annotation-->
   <context:annotation-config/> 

   <!-- Scan Controllers -->
   <context:component-scan base-package="com.controller"/>

   <!-- Data Source (iBatis) Property -->
   <import resource="classpath:spring-ds.xml"/>

   <!--Resolver-->
   <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
      <property name="cache" value="true"/>
      <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
      <property name="prefix" value="/WEB-INF/jsp/"/>
      <property name="suffix" value=".jsp"/>
   </bean>
</beans>

spring-ds.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="
           http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
           http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
           http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd"
      default-lazy-init="true">

   <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
      <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
      <property name="url" value="jdbc:mysql://localhost/notificationdb/>
      <property name="username" value="userdb"/>
      <property name="password" value="passdb"/>
      <property name="defaultAutoCommit" value="false" />
      <property name="initialSize" value="5" />
      <property name="maxActive" value="20" />
      <property name="maxIdle" value="5" />
      <property name="maxOpenPreparedStatements" value="50" />
   </bean>

   <bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
      <property name="configLocation" value="classpath:ibatis-config.xml" />
      <property name="dataSource" ref="dataSource"/>
   </bean>

   <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
      <property name="dataSource" ref="dataSource"/>
   </bean>

   <tx:annotation-driven transaction-manager="transactionManager"/>

</beans>

NotificationDao.java:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.orm.ibatis.support.SqlMapClientDaoSupport;
import org.springframework.stereotype.Repository;
import com.amt.mis.msc.domain.Notification;
import com.ibatis.sqlmap.client.SqlMapClient;

@Repository(value = "notificationDao")
public class NotificationDao extends SqlMapClientDaoSupport {

   @Autowired
   public void setSqlMapClnt(SqlMapClient sqlMapClient){
      this.setSqlMapClient(sqlMapClient);
   }

   public Notification findNotificationById(Long id){
      return (Notification) getSqlMapClientTemplate().queryForObject("notification.findNotificationById", id);
   }

   public Notification insertNotification(Notification notification){
      return (Notification) getSqlMapClientTemplate().insert("notification.insertNotification", notification);
   }
}

NotificationService.java:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.amt.mis.msc.dao.NotificationDao;
import com.amt.mis.msc.domain.Notification;

@Service(value = "notificationService")
public class NotificationService {

   @Autowired
   private NotificationDao notificationDao;

   @Transactional
   public Notification insert(Notification notification){
      return notificationDao.insertNotification(notification);
   }

   public Notification findById(Long id){
      return notificationDao.findNotificationById(id);
   }
}

Minimal Jars dependencies:

  • aopalliance.jar
  • asm.jar
  • commons-dbcp.jar
  • commons-pool.jar
  • ibatis-2.3.4.726.jar
  • spring-aop.jar
  • spring-beans.jar
  • spring-context.jar
  • spring-context-support.jar
  • spring-core.jar
  • spring-jdbc.jar
  • spring-orm.jar
  • spring-tx.jar
  • spring-web.jar
  • spring-webmvc.jar


Similar Posts:

Bookmark:
  • Digg
  • del.icio.us
  • Facebook
  • Google
  • description
  • LinkedIn
  • Slashdot
  • Technorati
  • TwitThis
  • Yahoo! Buzz

Leave a comment

Your comment

Spam Protection by WP-SpamFree