Results 1 to 1 of 1

Thread: Spring 3 + MyBatis, SqlSessionDaoSupport

  1. #1
    Join Date
    May 2011
    Posts
    2

    Default 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="jdbcostgresql://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
  •