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












