-
May 13th, 2011, 01:53 PM
#1
Spring 3 + MyBatis, SqlSessionDaoSupport
I use Spring 3.0.2 and mybatis:
web.xml
<servlet>
<servlet-name>springServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherSe rvlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/classes/spring.xml,
/WEB-INF/classes/SqlMapConfig2.xml
</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springServlet</servlet-name>
<url-pattern>*.html</url-pattern>
</servlet-mapping>
spring.xml
<context:component-scan base-package="com.geopoint.portal"/>
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="configLocation" value="/WEB-INF/classes/SqlMapConfig2.xml"/>
<property name="mapperLocations" value="classpath:/com/geopoint/portal/dao/*2Mapper.xml" />
</bean>
<bean class="org.mybatis.spring.mapper.MapperScannerConf igurer">
<property name="basePackage" value="com.geopoint.portal.service" />
</bean>
SqlMapConfig2.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
SYSTEM "file:/E:/projects/GEOPOINT.COM/src/src_java/portal-model/src/main/resources/com/geopoint/portal/dtd/mybatis-3-config.dtd">
<configuration>
<settings>
<setting name="lazyLoadingEnabled" value="false"/>
<setting name="multipleResultSetsEnabled" value="true"/>
<setting name="defaultStatementTimeout" value="25000"/>
<setting name="defaultExecutorType" value="REUSE" />
</settings>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="org.postgresql.Driver" />
<property name="url" value="jdbc
ostgresql://127.0.0.1:5432/geopoint" />
<property name="username" value="postgres" />
<property name="password" value="postgres" />
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="com/geopoint/portal/dao/MonetaryAccount2Mapper.xml"/>
</mappers>
</configuration>
MonetaryAccount2Mapper.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
SYSTEM "file:/E:/projects/GEOPOINT.COM/src/src_java/portal-model/src/main/resources/com/geopoint/portal/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.geopoint.portal.service.MonetaryAcc ount2Service">
<resultMap id="AccountResult" type="com.geopoint.portal.bean.MonetaryAccount">
<id property="idmonetaryaccount" column="id_monetary_account"/>
<result property="userid" column="user_id"/>
<result property="sum" column="sum"/>
</resultMap>
<select id="selectAccountByUserId" parameterType="Integer" resultMap="AccountResult">
SELECT * FROM monetary_account WHERE user_id = #{idmonetaryaccount}
</select>
</mapper>
MonetaryAccount2DAOImpl.java
package com.geopoint.portal.dao.impl;
import com.geopoint.portal.bean.MonetaryAccount;
import com.geopoint.portal.dao.MonetaryAccount2DAO;
import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.support.SqlSessionDaoSupport;
import org.springframework.beans.factory.annotation.Autow ired;
import org.springframework.stereotype.Repository;
import java.sql.SQLException;
@Repository("monetaryAccount2DAO")
public class MonetaryAccount2DAOImpl extends SqlSessionDaoSupport implements MonetaryAccount2DAO {
@Autowired
private SqlSessionFactory sqlSessionFactory;
public MonetaryAccount getAccountByUserId(int user_id) throws SQLException {
Integer key = user_id;
return (MonetaryAccount) getSqlSession().selectOne("com.geopoint.portal.ser vice.MonetaryAccount2Service.selectAccountByUserId ", key);
}
}
MonetaryAccount2DAO.java
package com.geopoint.portal.dao;
import com.geopoint.portal.bean.MonetaryAccount;
import java.sql.SQLException;
public interface MonetaryAccount2DAO {
MonetaryAccount getAccountByUserId(@Param("idmonetaryaccount") int user_id) throws SQLException;
}
MonetaryAccount2ServiceImpl.java
package com.geopoint.portal.service.impl;
import com.geopoint.portal.bean.MonetaryAccount;
import com.geopoint.portal.dao.MonetaryAccountDAO;
import org.springframework.beans.factory.annotation.Autow ired;
import org.springframework.stereotype.Service;
import java.sql.SQLException;
@Service
public class MonetaryAccount2ServiceImpl {
@Autowired
MonetaryAccountDAO monetaryAccountDAO;
public MonetaryAccount getAccountByUserId(int user_id) throws SQLException {
return monetaryAccountDAO.getAccountByUserId(user_id);
}
}
MonetaryAccount2Service.java
package com.geopoint.portal.service;
import com.geopoint.portal.bean.MonetaryAccount;
import java.sql.SQLException;
public interface MonetaryAccount2Service {
MonetaryAccount getAccountByUserId(int user_id) throws SQLException;
}
maven dependencies:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>3.0.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version> 1.0.0</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version> 3.0.4</version>
</dependency>
When tomcat starts:
javax.servlet.ServletException: Servlet.init() for servlet springServlet threw exception
org.apache.catalina.valves.ErrorReportValve.invoke (ErrorReportValve.java:108)
org.apache.catalina.valves.AccessLogValve.invoke(A ccessLogValve.java:558)
org.apache.catalina.connector.CoyoteAdapter.servic e(CoyoteAdapter.java:379)
org.apache.coyote.http11.Http11AprProcessor.proces s(Http11AprProcessor.java:282)
org.apache.coyote.http11.Http11AprProtocol$Http11C onnectionHandler.process(Http11AprProtocol.java:35 7)
org.apache.tomcat.util.net.AprEndpoint$SocketProce ssor.run(AprEndpoint.java:1687)
java.util.concurrent.ThreadPoolExecutor$Worker.run Task(ThreadPoolExecutor.java:886)
java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:908)
java.lang.Thread.run(Thread.java:619)
root cause
org.springframework.beans.factory.BeanDefinitionSt oreException: Failed to load bean class: com.geopoint.portal.dao.impl.MonetaryAccount2DAOIm pl; nested exception is java.io.FileNotFoundException: class path resource [org/mybatis/spring/support/SqlSessionDaoSupport.class] cannot be opened because it does not exist
org.springframework.context.annotation.Configurati onClassPostProcessor.processConfigBeanDefinitions( ConfigurationClassPostProcessor.java:180)
org.springframework.context.annotation.Configurati onClassPostProcessor.postProcessBeanDefinitionRegi stry(ConfigurationClassPostProcessor.java:132)
org.springframework.context.support.AbstractApplic ationContext.invokeBeanFactoryPostProcessors(Abstr actApplicationContext.java:584)
org.springframework.context.support.AbstractApplic ationContext.refresh(AbstractApplicationContext.ja va:405)
org.springframework.web.servlet.FrameworkServlet.c reateWebApplicationContext(FrameworkServlet.java:4 42)
org.springframework.web.servlet.FrameworkServlet.c reateWebApplicationContext(FrameworkServlet.java:4 58)
org.springframework.web.servlet.FrameworkServlet.i nitWebApplicationContext(FrameworkServlet.java:339 )
org.springframework.web.servlet.FrameworkServlet.i nitServletBean(FrameworkServlet.java:306)
org.springframework.web.servlet.HttpServletBean.in it(HttpServletBean.java:127)
javax.servlet.GenericServlet.init(GenericServlet.j ava:158)
...
root cause
java.io.FileNotFoundException: class path resource [org/mybatis/spring/support/SqlSessionDaoSupport.class] cannot be opened because it does not exist
org.springframework.core.io.ClassPathResource.getI nputStream(ClassPathResource.java:141)
org.springframework.core.type.classreading.SimpleM etadataReader.<init>(SimpleMetadataReader.java:45)
org.springframework.core.type.classreading.SimpleM etadataReaderFactory.getMetadataReader(SimpleMetad ataReaderFactory.java:80)
org.springframework.core.type.classreading.Caching MetadataReaderFactory.getMetadataReader(CachingMet adataReaderFactory.java:72)
org.springframework.core.type.classreading.SimpleM etadataReaderFactory.getMetadataReader(SimpleMetad ataReaderFactory.java:76)
org.springframework.context.annotation.Configurati onClassParser.processConfigurationClass(Configurat ionClassParser.java:110)
org.springframework.context.annotation.Configurati onClassParser.parse(ConfigurationClassParser.java: 85)
org.springframework.context.annotation.Configurati onClassPostProcessor.processConfigBeanDefinitions( ConfigurationClassPostProcessor.java:176)
org.springframework.context.annotation.Configurati onClassPostProcessor.postProcessBeanDefinitionRegi stry(ConfigurationClassPostProcessor.java:132)
org.springframework.context.support.AbstractApplic ationContext.invokeBeanFactoryPostProcessors(Abstr actApplicationContext.java:584)
org.springframework.context.support.AbstractApplic ationContext.refresh(AbstractApplicationContext.ja va:405)
org.springframework.web.servlet.FrameworkServlet.c reateWebApplicationContext(FrameworkServlet.java:4 42)
...
I tried to copy every jar to tomcat lib directory, but this is not a solution.
When I tried to comment @Repository annotation it was compiled and tomcat started without errors. But I plan to use Spring 3 @Component type annotations.
Can someone explain why FileNotFoundException here and how to integrate Mybatis with Spring 3 annotations?
Last edited by vaz; May 30th, 2011 at 11:43 AM.
Posting Permissions
- You may not post new threads
- You may not post replies
- You may not post attachments
- You may not edit your posts
-
Forum Rules