映射语句集合不包含mybatis映射器的值

时间:2016-01-31 08:57:17

标签: java mysql xml spring mybatis

我是用户mybatis并开始创建一些测试网站。现在我在尝试使用mybatis xml mapper时遇到了问题。问题类似于“java.lang.IllegalArgumentException:Mapped Statements集合不包含com.cooldrinker.mybatis.mapper.AdminMapper.getAdminByUsername”的值

servlet.xml中

<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="typeAliasesPackage" value="com.cooldrinker.mybatis.model"/>
        <property name="mapperLocations" value="classpath*:com/cooldrinker/mybatis/mapper/*.xml" />
    </bean>

Java mapper

package com.cooldrinker.mybatis.mapper;

import com.cooldrinker.mybatis.model.Admin;

public interface AdminMapper {
    public Admin getAdminByUsername(String username);
}

xml mapper

<?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="com.cooldrinker.mybatis.mapper.AdminMapper">
    <select id="getAdminByUsername" parameterType="java.lang.String" resultType="adminResultMap">
        SELECT first_name, last_name, password, username
        FROM admin
        WHERE username = #{username}
    </select>

    <resultMap id="adminResultMap" type="com.cooldrinker.mybatis.model.Admin">
        <result property="firstName" column="first_name" />
        <result property="username" column="last_name"/>
        <result property="password" column="password"/>
        <result property="username" column="username"/>
    </resultMap>
</mapper>

堆栈跟踪

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.IllegalArgumentException: Mapped Statements collection does not contain value for com.cooldrinker.mybatis.mapper.AdminMapper.getAdminByUsername
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:973)
    org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:863)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:648)
    org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:837)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

root cause

java.lang.IllegalArgumentException: Mapped Statements collection does not contain value for com.cooldrinker.mybatis.mapper.AdminMapper.getAdminByUsername
    org.apache.ibatis.session.Configuration$StrictMap.get(Configuration.java:672)
    org.apache.ibatis.session.Configuration.getMappedStatement(Configuration.java:507)
    org.apache.ibatis.session.Configuration.getMappedStatement(Configuration.java:500)
    org.apache.ibatis.binding.MapperMethod.setupCommandType(MapperMethod.java:240)
    org.apache.ibatis.binding.MapperMethod.<init>(MapperMethod.java:71)
    org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:39)
    com.sun.proxy.$Proxy38.getAdminByUsername(Unknown Source)
    com.cooldrinker.mybatis.dao.impl.AdminDaoImpl.getAdminByUsername(AdminDaoImpl.java:24)
    com.cooldrinker.dataservice.service.impl.AdminServiceImpl.getAdminByUsername(AdminServiceImpl.java:26)
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    java.lang.reflect.Method.invoke(Method.java:606)
    org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:317)
    org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:190)
    org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157)
    org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:110)
    org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
    org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:207)
    com.sun.proxy.$Proxy42.getAdminByUsername(Unknown Source)
    com.cooldrinker.controller.AdminLoginController.login(AdminLoginController.java:39)
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    java.lang.reflect.Method.invoke(Method.java:606)
    org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:214)
    org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:132)
    org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:104)
    org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:749)
    org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:690)
    org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:83)
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:945)
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:876)
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:961)
    org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:863)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:648)
    org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:837)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

3 个答案:

答案 0 :(得分:0)

这种错误是由于DAO↔XML

之间的错误引用造成的

让我在&#34; AdminMapper&#34;中显示实施。 AND&#34; AdminMapperDAO&#34; 也许这就是重点。

答案 1 :(得分:0)

您可以在mybatis-config.xml文件中注册映射器

<configuration>

  <properties resource="db.dev.properties">
  </properties>

    <typeHandlers>
        <package name="com.newtonx.model.typehandlers"/>
    </typeHandlers>
    <environments default="development">
     ...
    </environments>
    <mappers>
      <mapper resource="com/project/model/xml/SomeMapper.xml"/>
      // other mapper here
    </mappers>
    ...
</configuration>

答案 2 :(得分:0)

The three names have to match:

  • interface = com.cooldrinker.mybatis.mapper.AdminMapper.class
  • 映射器文件= com / cooldrinker / mybatis / mapper / AdminMapper.xml
  • mapper名称空间= com.cooldrinker.mybatis.mapper.AdminMapper

如果它们不匹配,它将无法正常工作。