错误:It's likely that neither a Result Type nor a Result Map was specified.

org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.executor.ExecutorException: A query was run and no Result Maps were found for the Mapped Statement 'com.sq.News.dao.NewsMapper.getContent'.  It's likely that neither a Result Type nor a Result Map was specified.
	at org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:77)
	at org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:446)
	at com.sun.proxy.$Proxy33.selectOne(Unknown Source)
	at org.mybatis.spring.SqlSessionTemplate.selectOne(SqlSessionTemplate.java:166)
	at org.apache.ibatis.binding.MapperMethod.execute(MapperMethod.java:82)
	at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:53)
	at com.sun.proxy.$Proxy34.getContent(Unknown Source)
	at com.sq.News.service.NewsServiceclass.getContent(NewsServiceclass.java:45)
	at com.sq.News.controller.NewsController.getContent(NewsController.java:148)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:564)
	at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205)
	at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:133)
	at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:97)
	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:827)
	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:738)
	at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)
	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:967)
	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:901)
	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)
	at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:634)
	at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:197)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:494)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
	at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:651)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:412)
	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:754)
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1385)
	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
	at java.base/java.lang.Thread.run(Thread.java:844)

Mybatis,这是因为没有指定好查询语句的返回数据类型导致的,在xml里编写sql语句一定要指定实现函数的参数类型和返回类型。

比如:持久层接口函数如下:

 

在xml文件中编写对应的sql语句时:

可以看到,resultType="NI",指定了返回类型。这里NI是我的实体类的一个别名。也可以换成实体类的全名。

<think>好的,我现在需要帮助用户解决他们遇到的MyBatis异常问题。首先,用户提供的错误信息是ExecutorException,指出在运行查询时,Mapped Statement 'com.example.process.mapper.ParttopartMapper.selectBom'没有找到Result Maps,也没有指定Result TypeResult Map。我需要理解这个错误的原因,并给出解决方案。 首先,我应该回忆一下MyBatis的工作原理。当执行一个查询语句时,MyBatis需要知道如何将结果集映射到Java对象。这可以通过两种方式实现:指定resultType(直接指定Java类的全限定名)或者使用resultMap(定义一个详细的映射关系)。 用户遇到的错误提示表明,MyBatis在执行selectBom这个Mapped Statement时,没有找到任何Result Maps,也没有指定Result Type。因此,这个问题的根本原因可能是在对应的Mapper XML文件中,selectBom语句缺少了resultTyperesultMap属性。 接下来,我需要考虑可能的解决方案。首先,检查对应的XML映射文件,查看selectBom的语句是否配置了resultTyperesultMap。如果没有,就需要添加其中一个属性。如果用户使用的是resultMap,则需要确保resultMap的id正确,并且在XML中有定义对应的resultMap。此外,还要检查是否存在拼写错误,比如resultType的类名是否正确,包路径是否无误。 另外,可能的其他原因包括:Mapper接口的方法返回值类型是否正确,或者是否使用了注解配置但配置不正确。例如,如果Mapper接口中的方法使用了@ResultMap注解,但指定的resultMap不存在,也可能导致这个错误。 我还需要考虑到用户可能的配置问题,例如是否在MyBatis的配置文件中正确扫描了对应的Mapper XML文件,或者是否在Spring配置中正确引入了Mapper接口。但根据错误信息来看,问题更可能出在resultTyperesultMap的配置上,而不是整个Mapper文件的加载问题。 总结一下,解决步骤应该是: 1. 检查selectBom的SQL语句是否配置了resultTyperesultMap。 2. 如果使用了resultType,确认其值是正确的Java类型全限定名。 3. 如果使用了resultMap,确认其id正确,并且在XML中有定义。 4. 检查是否存在拼写错误或包路径错误。 5. 确认Mapper接口的方法返回类型与resultTyperesultMap匹配。 在向用户解释时,需要分步骤说明,并给出具体的示例,比如如何添加resultType到XML中的select语句,或者如何定义resultMap。同时,提醒用户检查常见的拼写错误和配置错误,确保类名和路径正确无误。 可能还需要考虑用户是否在MyBatis的配置中启用了自动映射(auto-mapping),但即使启用了,某些情况下仍然需要显式配置resultTyperesultMap。此外,如果查询返回的是复杂的对象结构,比如包含嵌套对象或集合,这时候必须使用resultMap来进行详细配置。 最后,确保用户理解每个步骤的意义,帮助他们逐步排查问题,从而解决这个异常。</think>这个错误表示MyBatis在执行SQL查询时,未能找到结果映射配置。以下是分步解析和解决方案: --- ### **错误原因** 当MyBatis执行 `selectBom` 查询时,出现以下情况: 1. XML映射文件中未定义 `resultType` 或 `resultMap` 2. `resultMap` 的ID拼写错误或未正确定义 3. `resultType` 的类路径错误或未导入 --- ### **解决方案步骤** #### 1. 检查Mapper XML文件 在 `ParttopartMapper.xml` 中,确认 `selectBom` 语句是否配置了 `resultType` 或 `resultMap`: ```xml <!-- 正确示例1:使用resultType --> <select id="selectBom" resultType="com.example.process.entity.Bom"> SELECT * FROM bom_table </select> <!-- 正确示例2:使用resultMap --> <select id="selectBom" resultMap="BomResultMap"> SELECT * FROM bom_table </select> ``` - 如果使用 `resultType`:确保类全路径(如 `com.example.process.entity.Bom`)正确。 - 如果使用 `resultMap`:需在XML中定义对应的 `<resultMap>`。 --- #### 2. 检查resultMap定义(如使用resultMap) 若配置了 `resultMap="BomResultMap"`,需确保存在如下定义: ```xml <resultMap id="BomResultMap" type="com.example.process.entity.Bom"> <id property="id" column="id"/> <result property="name" column="name"/> <!-- 其他字段映射 --> </resultMap> ``` - `id` 属性值必须与 `<select>` 标签的 `resultMap` 一致。 - `type` 属性必须是实体类的全限定名。 --- #### 3. 检查Java实体类路径 确认 `resultType` 或 `resultMap` 中指定的类: - 包路径无拼写错误(如 `com.example.process.entity.Bom`)。 - 类名与数据库字段能正确映射(可通过驼峰命名自动映射或显式定义)。 --- #### 4. 验证Mapper接口方法 检查 `ParttopartMapper` 接口中方法的返回类型是否与XML配置一致: ```java public interface ParttopartMapper { // 返回类型需匹配resultTyperesultMap映射的类 List<Bom> selectBom(); } ``` - 如果返回单个对象:`Bom selectBom();` - 如果返回列表:`List<Bom> selectBom();` --- #### 5. 检查XML文件加载 确保 `ParttopartMapper.xml` 已正确加载: - 在 `mybatis-config.xml` 中配置了 `<mapper>` 路径。 - 或在Spring Boot中通过 `@MapperScan` 扫描了Mapper接口所在包。 --- ### **常见错误场景** 1. **忘记写resultType/resultMap** ```xml <!-- 错误示例:缺少resultType --> <select id="selectBom"> SELECT * FROM bom_table </select> ``` 2. **resultMap未正确定义** ```xml <!-- 错误示例:resultMap的ID与select标签中引用的不一致 --> <resultMap id="WrongMap" type="com.example..."> ``` 3. **实体类包路径错误** ```xml <!-- 错误示例:Bom类实际路径是com.example.model.Bom --> <select id="selectBom" resultType="com.example.process.entity.Bom"> ``` --- ### **总结** 通过检查以下三点即可解决问题: 1. XML中是否配置 `resultType` 或 `resultMap`。 2. `resultType` 的类路径或 `resultMap` 的定义是否正确。 3. Mapper接口方法返回类型是否匹配。 如果仍有问题,可尝试清理项目重新编译,确保XML文件被正确打包到最终部署目录中。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值