我是用户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)
答案 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:
如果它们不匹配,它将无法正常工作。