Исключение аннотации Mybatis Spring

1

Привет, у меня проблема с аннотацией autwire с использованием пружины и mybatis. То, что я делаю неправильно - в учебниках мы должны только autowire интерфейс, сопоставленный файлом xml и папкой сканирования в конфигурации сервлета.

Tomcat возвращает NoSuchBeanDefintionException, например, не видит интерфейс UserMapper. Создайте bean-компонент в ошибке возврата конфигурации se4vlet, он не может создать bean-компонент из интерфейса.

Спасибо за помощь.

    <annotation-driven />
    <!-- enable autowire -->
    <context:annotation-config />
    <context:component-scan base-package="pl.xxx.eppm.controllers">        /context:component-scan>
    <context:component-scan base-package="pl.xxx.mappers"></context:component-scan>

    <resources mapping="/css/**" location="/WEB-INF/frontend/css/" />
    <resources mapping="/js/**" location="/WEB-INF/frontend/js/" /> 


    <beans:bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
         <beans:property name="driverClassName" value="com.mysql.jdbc.Driver"/>
         <beans:property name="url" value="jdbc:mysql://localhost:3306/eppm"/>
         <beans:property name="username" value="root"/>
         <beans:property name="password" value=""/>
    </beans:bean>

    <beans:bean id="templateResolver" class="org.thymeleaf.templateresolver.ServletContextTemplateResolver">
        <beans:property name="prefix" value="/WEB-INF/frontend/" />
        <beans:property name="suffix" value=".htm"   />
        <beans:property name="templateMode" value="HTML5" />        
    </beans:bean>

    <beans:bean id="templateEngine" class="org.thymeleaf.spring4.SpringTemplateEngine">
        <beans:property name="templateResolver" ref="templateResolver" />
    </beans:bean>

    <beans:bean class="org.thymeleaf.spring4.view.ThymeleafViewResolver">
        <beans:property name="templateEngine" ref="templateEngine" />
    </beans:bean>

    <beans:bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <beans:property name="dataSource" ref="dataSource" />
        <beans:property name="typeAliasesPackage" value="pl.xxx.mappers"/>
        <beans:property name="mapperLocations" value="classpath*:/resources/mappers/*.xml" />       
    </beans:bean>

    <beans:bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <beans:property name="basePackage" value="pl.xxx.mybatis.mappers" />
    </beans:bean>

userMapper.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE mapper PUBLIC '-//mybatis.org//DTD Mapper 3.0//EN'
  'http://mybatis.org/dtd/mybatis-3-mapper.dtd'>
     <mapper namespace='pl.xxx.mappers.UserMapper'>

    <select id="getUserById" parameterType="int" resultType="pl.xxx.users.User">
        SELECT  id,
                username,
                password,
                isActive
        FROM USERS
        WHERE id = #{userId}
    </select>

    <select id="getUserByName" parameterType="string" resultType="pl.xxx.users.User">
        SELECT  id,
                username,
                password,
                isActive
        FROM USERS
        WHERE username = #{username}
    </select>   

    <resultMap type="User" id="UserResult">
        <id property="id" column="id" />
        <result property="username" column="username" />
        <result property="password" column="password" />        
        <result property="isActive" column="isActive" />
    </resultMap>

    <select id="getAllUsers" resultMap="UserResult">
        SELECT * FROM USERS
    </select>

    <insert id="insertUser" parameterType="User" useGeneratedKeys="true" keyProperty="id">
        INSERT INTO 
            USERS(username, password, isActive) 
            VALUES(#{username}, #{password}, #{isActive})
    </insert>

    <update id="updateUser" parameterType="User">
        UPDATE 
            USERS
        SET
            username = #{username},
            password = #{password},
            isActive = #{isActive}
        WHERE 
            id = #{id}
    </update> 

    <delete id="deleteUser" parameterType="int">
        DELETE FROM 
            USERS
        WHERE
            id = #{id} 
    </delete>

</mapper>

UserService.java

    @Service
    public class UserDAO implements UserMapper {

    @Autowired
    private UserMapper userMapper;

    public void insertUser(User user) {
        // TODO Auto-generated method stub

    }

    public User getUserById(Integer userId) {
        return userMapper.getUserById(userId);
    }

    public User getUserByName(String username) {
        // TODO Auto-generated method stub
        return null;
    }

    public List<User> getAllUsers() {
        // TODO Auto-generated method stub
        return null;
    }

    public void updateUser(User user) {
        // TODO Auto-generated method stub

    }

    public void deleteUser(Integer userId) {
        // TODO Auto-generated method stub

    }


}

UserMapper.java

     package pl.xxx.mappers;

     import java.util.List;

     import org.springframework.stereotype.Service;

     import pl.xxx.users.User; 


    public interface UserMapper {
     public void insertUser(User user);

     public User getUserById(Integer userId);

     public User getUserByName(String username);

     public List<User> getAllUsers();

     public void updateUser(User user);

     public void deleteUser(Integer userId);
     }

контроллер

    @Controller
    public class MainPageController {

    private UserMapper UserDao;

    @RequestMapping(value="/")
    public String mainController(){
        System.out.println(UserDao.getUserById(1));
        return "index";
    }

    @RequestMapping(value="/test")
    public String testController(){
        return "index";
    }
    }

Трассировка:

    HTTP Status 500 - Servlet.init() for servlet SpringDispatcherServlet threw exception

    type Exception report

    message Servlet.init() for servlet SpringDispatcherServlet threw exception

    description The server encountered an internal error that prevented it from fulfilling this request.

    exception

    javax.servlet.ServletException: Servlet.init() for servlet SpringDispatcherServlet threw exception
        org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
        org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
        org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
        org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
        org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1023)
        org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
        org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
        java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        java.lang.Thread.run(Thread.java:745)
    root cause

    org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'userDAO': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private pl.xxx.mappers.UserMapper pl.xxx.mappers.UserDAO.userMapper; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [pl.xxx.mappers.UserMapper] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
        org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:334)
        org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1202)
        org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:537)
        org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:476)
        org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:303)
        org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
        org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:299)
        org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)
        org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:762)
        org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:757)
        org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:480)
        org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:663)
        org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:629)
        org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:677)
        org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:548)
        org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:489)
        org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:136)
        javax.servlet.GenericServlet.init(GenericServlet.java:160)
        org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
        org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
        org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
        org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
        org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1023)
        org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
        org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
        java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        java.lang.Thread.run(Thread.java:745)
    root cause

    org.springframework.beans.factory.BeanCreationException: Could not autowire field: private pl.xxx.mappers.UserMapper pl.xxx.mappers.UserDAO.userMapper; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [pl.xxx.mappers.UserMapper] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
        org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:561)
        org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88)
        org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:331)
        org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1202)
        org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:537)
        org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:476)
        org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:303)
        org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
        org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:299)
        org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)
        org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:762)
        org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:757)
        org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:480)
        org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:663)
        org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:629)
        org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:677)
        org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:548)
        org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:489)
        org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:136)
        javax.servlet.GenericServlet.init(GenericServlet.java:160)
        org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
        org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
        org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
        org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
        org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1023)
        org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
        org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
        java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        java.lang.Thread.run(Thread.java:745)
    root cause

    org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [pl.xxx.mappers.UserMapper] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
        org.springframework.beans.factory.support.DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(DefaultListableBeanFactory.java:1308)
        org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1054)
        org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:949)
        org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:533)
        org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88)
        org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:331)
        org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1202)
        org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:537)
        org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:476)
        org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:303)
        org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230)
        org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:299)
        org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)
        org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:762)
        org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:757)
        org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:480)
        org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:663)
        org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:629)
        org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:677)
        org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:548)
        org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:489)
        org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:136)
        javax.servlet.GenericServlet.init(GenericServlet.java:160)
        org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
        org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
        org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
        org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
        org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1023)
        org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
        org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
        java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        java.lang.Thread.run(Thread.java:745)
    note The full stack trace of the root cause is available in the Apache Tomcat/7.0.42 logs.

    Apache Tomcat/7.0.42

У меня есть еще одна проблема:

         org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.NullPointerException
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:978)
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:857)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
    org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:842)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
root cause

java.lang.NullPointerException
    pl.xxx.eppm.controllers.MainPageController.mainController(MainPageController.java:22)
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    java.lang.reflect.Method.invoke(Method.java:483)
    org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:221)
    org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137)
    org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:110)
    org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:777)
    org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:706)
    org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:943)
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:877)
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:966)
    org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:857)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
    org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:842)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
note The full stack trace of the root cause is available in the Apache Tomcat/7.0.42 logs.

И последняя ошибка тогда

        org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): pl.xxx.mappers.UserMapper.getUserById
        org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:978)
        org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:857)
        javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
        org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:842)
        javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
    root cause

    org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): pl.xxx.mappers.UserMapper.getUserById
        org.apache.ibatis.binding.MapperMethod$SqlCommand.<init>(MapperMethod.java:189)
        org.apache.ibatis.binding.MapperMethod.<init>(MapperMethod.java:43)
        org.apache.ibatis.binding.MapperProxy.cachedMapperMethod(MapperProxy.java:58)
        org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:51)
        com.sun.proxy.$Proxy132.getUserById(Unknown Source)
        pl.xxx.mappers.UserDAO.getUserById(UserDAO.java:22)
        pl.xxx.eppm.controllers.MainPageController.mainController(MainPageController.java:24)
        sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        java.lang.reflect.Method.invoke(Method.java:483)
        org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:221)
        org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137)
        org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:110)
        org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:777)
        org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:706)
        org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)
        org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:943)
        org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:877)
        org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:966)
        org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:857)
        javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
        org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:842)
        javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
    note The full stack trace of the root cause is available in the Apache Tomcat/7.0.42 logs.

    Apache Tomcat/7.0.42
  • 1
    Ну, в чем твоя проблема? Что не работает? Каковы сообщения об ошибках? Пожалуйста, прочитайте это внимательно
  • 0
    Спасибо Боудзоне, у меня проблема с редактированием поста, и его часть была съедена.
Показать ещё 2 комментария
Теги:
spring
mybatis

4 ответа

1
Лучший ответ

Проверьте дополнительную mybatis часть имени пакета "pl.xxx.mybatis.mappers". Я думаю, его только "pl.xxx.mappers"

<beans:bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <beans:property name="basePackage" value="pl.xxx.mybatis.mappers" />
</beans:bean>
  • 0
    Да, я имею право!
  • 0
    Есть только еще одна проблема - автопроводное поле не Inject to Controller
Показать ещё 6 комментариев
0

Я думаю, что вы просто сталкиваетесь с функцией (а не с ошибкой) :-) где имя класса Java должно быть ТОЧНО таким же, как файл XML файла mapper.

XML файл вашего пользователя - верблюд. Случай с именем Java.

Еще несколько деталей

0

У меня была аналогичная проблема, я использовал в sql-запросе в dao

GROUP_CONCAT(xyz SEPARATOR '<br/>')

Проблема заключалась в
<br/>
, он ожидал \&\l\t \; br/\ &\g\t \;

Проводя это с надеждой, что это может помочь кому-то с подобной проблемой. Никакой отрицательный рейтинг пожалуйста.

0

Попробуйте добавить:

<configuration>
    <...>
    <mappers>
        <mapper resource="UserMapper.xml" />
    <mappers>
</configuration>

UserMapper.xml:

<!-- Using ResultMap -->
<resultMap id="result" type="pl.xxx.users.User">
    <id property="id" column="id"/>
    <result property="username" column="username" />
    <result property="password" column="password" />
    <result property="isactive" column="active" />
</resultMap>

Проверьте тип User.id(java.lang.Integer? Long):

<select id="getUserById" parameterType="java.lang.Long" resultType="result">
    SELECT  id,
            username,
            password,
            isActive
    FROM USERS
    WHERE id = #{userId}
</select>

Вместо этого XML u может сделать это:

import org.apache.ibatis.annotations.Select;

public interface UserMapper {
@Select("SELECT * FROM users WHERE id = #{userid}")
Employee getUserById(Long id);

@Select("SELECT * FROM users)
List<User> getAllUsers();

}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню