Could not find result map com.kgc.mapper.InRoomInfoMapper.Map

今天在用maven+SSM做酒店管理系统的一个功能模块的开始阶段,遇到一个bug,下面把我遇到的这个bug以及解决的方法分享给大家,以供参考。

  • 页面显示状态码:500
  • 错误信息:
    Message Request processing failed; nested exception is org.apache.ibatis.builder.IncompleteElementException: Could not find result map com.kgc.mapper.InRoomInfoMapper.Map
  • 具体bug信息如下:
HTTP Status 500 – Internal Server Error

Message Request processing failed; nested exception is org.apache.ibatis.builder.IncompleteElementException: Could not find result map com.kgc.mapper.InRoomInfoMapper.Map

Description The server encountered an unexpected condition that prevented it from fulfilling the request.

Exception
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.apache.ibatis.builder.IncompleteElementException: Could not find result map com.kgc.mapper.InRoomInfoMapper.Map
	org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:982)
	org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:635)
	org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
	org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)

Root Cause
org.apache.ibatis.builder.IncompleteElementException: Could not find result map com.kgc.mapper.InRoomInfoMapper.Map
	org.apache.ibatis.builder.MapperBuilderAssistant.getStatementResultMaps(MapperBuilderAssistant.java:346)
	org.apache.ibatis.builder.MapperBuilderAssistant.addMappedStatement(MapperBuilderAssistant.java:290)
	org.apache.ibatis.builder.xml.XMLStatementBuilder.parseStatementNode(XMLStatementBuilder.java:109)
	org.apache.ibatis.session.Configuration.buildAllStatements(Configuration.java:775)
	org.apache.ibatis.session.Configuration.hasStatement(Configuration.java:745)
	org.apache.ibatis.session.Configuration.hasStatement(Configuration.java:740)
	org.apache.ibatis.binding.MapperMethod$SqlCommand.<init>(MapperMethod.java:217)
	org.apache.ibatis.binding.MapperMethod.<init>(MapperMethod.java:48)
	org.apache.ibatis.binding.MapperProxy.cachedMapperMethod(MapperProxy.java:65)
	org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:58)
	com.sun.proxy.$Proxy19.getInRoomInfos(Unknown Source)
	com.kgc.service.impl.InRoomInfoServiceImpl.findInRoomInfo(InRoomInfoServiceImpl.java:18)
	com.kgc.controller.InRoomInfoController.getInRoomInfos(InRoomInfoController.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:498)
	org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205)
	org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:133)
	org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:116)
	org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:827)
	org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:738)
	org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)
	org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:963)
	org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:897)
	org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)
	org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:635)
	org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
	org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
  • 解决思路:
  • 第一步:可能是spring管理mybatis的配置文件出了问题。 一般就是实体类配置文件关联相应的映射文件即mapperLocations属性必须要配置。
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!--dataSource属性指定要用到的连接池 ref映射的是id=dataSource的bean标签,读取连接数据库信息-->
        <property name="dataSource" ref="dataSource"/>
        <!--configLocation属性指定mybatis的核心配置文件,管理mybatis配置文件-->
        <property name="configLocation" value="classpath:mybatis/sqlMapConfig.xml"/>
        <!-- 所有配置的mapper文件,mybatis的实体类配置文件所有的sql映射文件 -->
        <property name="mapperLocations" value="classpath:mybatis/mapper/*.xml"></property>
    </bean>
  • 第二步:映射文件的结果集是Map类型,我考虑是否跟别名没有配置的关系,所以在myBatis配置文件中完善了别名的配置。
  • 备注:mybais中基本数据类型及其包装类以及map都默认配置别名,不需要我们配,像List,pojo类需要我们配置别名。
<!--配置别名-->
    <typeAliases>
        <typeAlias type="java.util.List" alias="list"></typeAlias>
        <package name="com.kgc"></package>
    </typeAliases>
  • 第三步:映射文件的结果集类型出错(也就是我出错的位置)
  • 错误配置:
<!--映射文件配置-->
<mapper namespace="com.kgc.mapper.InRoomInfoMapper">
    <select id="getInRoomInfos" resultMap="Map">
        SELECT * FROM in_room_info
    </select>
</mapper>
  • 正确配置:
<mapper namespace="com.kgc.mapper.InRoomInfoMapper">
    <select id="getInRoomInfos" resultType="Map">
        SELECT * FROM in_room_info
    </select>
</mapper>
  • 错误原因:由于我在用maven+SSM搭建完环境后做简单的测试,用的是一张表,返回的结果集应该是Map集合,但返回类型应该是resultType。

    补充:resultType和resultMap的用法是有区别的?

  • resultType表示返回类型,包括基本数据类型和复杂数据类型。

  • resultMap是对外部resultMap定义的引用,对应外部resultMap的id,表示返回结果映射到哪一个resultMap上。

  • 简单的来讲,就是单表查询返回的结果集使用resultType,多表联合查询的结果集使用resultMap。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值