Mybatis Spring 注解异常

Mybatis Spring annotation exception

您好,我在使用 spring 和 mybatis 时遇到了自动装配注释的问题。我做错了什么 - 在教程中,我们应该只自动装配由 xml 文件映射的接口并扫描 servlet 配置中的文件夹。

Tomcat return NoSuchBeanDefintionException 好像没有看到 UserMapper 接口。在 se4vlet 配置中创建 bean return 错误,它无法从接口创建 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.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.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.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

检查 "pl.xxx.mybatis.mappers" 包名称的额外 mybatis 部分。我猜它 "pl.xxx.mappers" 只有

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

尝试添加这个:

<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 你可以这样做:

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();

}

我遇到了类似的问题,我在 sql 查询中使用 dao

GROUP_CONCAT(xyz SEPARATOR '<br/>')

问题在于


, 它期待 \&\l\t\; br/ \&\g\t\;

发帖希望对遇到类似问题的人有所帮助。 请不要负分。

我认为您只是面临功能(不是错误):-) 其中 Java class 名称必须与映射器 XML 文件完全相同。

您的用户映射器 XML 是驼峰式大小写,反对帕斯卡式大小写 Java class 名称。

Some more details