mybatisplus/Mybatis报错:Invalid bound statement (not found): com.txc.mybatisplus.mapper.Mapper.findAll

1、问题描述

springboot整合MyBatis-Plus后,按照之前spring整合mybatis的用法,将StudentMapper.java接口和StudentMapper.xml映射文件,都创建在src下的mapper目录中,如下所示:

重点说明:此处的接口和映射文件命名需要遵循mapper代码开发四个规范。

规范1:接口的方法名与Statement的id相同

规范2:接口的返回值类型与Statement的resultType类型相同(ResultType只需要写单条数据的数据类型)

规范3:接口的传入参数与Statement的parameterType的类型相同。

规范4:映射文件中mapper的namespace值为接口的全类名,如:com.txc.mybatis.mapper.StudentMapper

 这个时候访问StudentMapper.java接口中的方法findAll,报错,提示找不到findAll这个Statement。

org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.txc.springbootjsp.mapper.StudentMapper.findAll
	at org.apache.ibatis.binding.MapperMethod$SqlCommand.(MapperMethod.java:235) ~[mybatis-3.5.9.jar:3.5.9]
	at org.apache.ibatis.binding.MapperMethod.(MapperMethod.java:53) ~[mybatis-3.5.9.jar:3.5.9]
	at org.apache.ibatis.binding.MapperProxy.lambda$cachedInvoker$0(MapperProxy.java:108) ~[mybatis-3.5.9.jar:3.5.9]
	at java.util.concurrent.ConcurrentHashMap.computeIfAbsent(ConcurrentHashMap.java:1660) ~[na:1.8.0_102]
	at org.apache.ibatis.util.MapUtil.computeIfAbsent(MapUtil.java:35) ~[mybatis-3.5.9.jar:3.5.9]
	at org.apache.ibatis.binding.MapperProxy.cachedInvoker(MapperProxy.java:95) ~[mybatis-3.5.9.jar:3.5.9]
	at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:86) ~[mybatis-3.5.9.jar:3.5.9]
	at com.sun.proxy.$Proxy58.findAll(Unknown Source) ~[na:na]
at com.txc.springbootjsp.controller.TestController.test2(TestController.java:44) ~[classes/:na]
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_102]
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_102]
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_102]
	at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_102]
	at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205) ~[spring-web-5.3.29.jar:5.3.29]
	at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150) ~[spring-web-5.3.29.jar:5.3.29]
	at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117) ~[spring-webmvc-5.3.29.jar:5.3.29]

2、问题的原因分析

1、Mybatisplus加载映射的默认位置在resources/mapper目录中,而不是自定义的src中的目录,

解决该问题只需要修改xml映射文件的存储地址即可

2、如果是Mybatis出现这个问题,主要是因为java工程的src中默认不编译和加载xml文件,需要在maven工程的pom.xml配置读取src中的xml文件。解决方式在下面。

3、解决办法

3.1、Mybatisplus解决办法1

将xml映射文件放置在resources/mapper目录中

 3.2、Mybatisplus解决办法2

自定义xml映射文件的存储位置,在application.yml(application.properties)文件中创建如下配置

mapper-locations: classpath:/mapper/**.xml:指定存放目录

mybatis-plus:
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
    map-underscore-to-camel-case: false
  #放到resource下
  mapper-locations: classpath:/mapper/**.xml
  #放到src/main/java目录下
  #classpath:/com/*/*/mapper/*Mapper.xml

3.3、Mybatis解决方案




    
        src/main/java
        
            **/*.xml
        
    

你可能感兴趣的:(Java开发常见BUG解决方案,mybatis)