排错:mybatis报错:Invalid bound statement (not found)

Invalid bound statement (not found)

在使用mybatis时,有时候会出现一些逻辑上解释不通的错误,这个时候就需要一本排错指南,记住这些常见的错误。

出现错误并不代表他复杂且难以理解,在有时候,某些错误就和电脑重开机就能解决90%的问题一样,充满玄学。

第一种:语法错误

Java DAO层接口

1
public void delete(@Param("id")String id);

Java 对应的mapper.xml文件:

1
2
3
4
5
6
7
8
<?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="xxx.xxx.xxx.Mapper">
<!-- 删除数据 -->
<delete id="delete" parameterType="java.lang.String">
DELETE FROM xxx WHERE id=#{id}
</delete>
</mapper>

检查:1. 接口中方法名(delete)与xml文件中 id=”delete”是否一致

   2. xml文件中的 namespace=”xxx.xxx.xxx.Mapper” 中的路径是否与接口文件路径一致

   3.parameterType类型 与 resultType类型是否准确;resultMap与resultType是不一样的。

第二种:编译错误

 定位到项目路径下:target\classes\ 中报错路径下,寻找对应的xml文件是否存在。

(1)若不存在对应的xml文件,则需要在pom.xml中加入以下代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<excludes>
<exclude>**/*.java</exclude>
</excludes>
</resource>
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.*</include>
</includes>
</resource>
</resources>
</build>

  删除classes文件夹中文件,重新编译,出现了对应的xml文件即可。

(2)若存在xml文件,则打开xml文件,检查其中报错部分是否与源文件一致,不一致,则

  先清除classes文件夹中文件,执行命令:mvn clean 清理内容,重新编译后即可。

第三种:配置错误

在配置文件中指定扫描包时,配置路径有问题。例如:spring配置文件中”basePackage” 属性包名的指定一定要具体到接口所在包,而不要写父级甚至更高级别的包 ,否则可能出现问题;cn.dao 与cn.*也可能导致错误;注解扫描时,可能没有扫描到包等。

第四种 细节错误

比如:

忘记在配置文件上加别名

忘记开启驼峰命名法

1
2
3
4
5
mybatis:
mapper-locations: classpath:/mapper/*.xml
type-aliases-package: com.example.thymeleaf.pojo
configuration:
map-underscore-to-camel-case: true

第五种 弱智型错误

再比如:

文件头没加@MapperSacn

或者是xml的文件头没加:

1
2
3
4
<?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">