一、问题分析
org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.atguigu.eduservice.mapper.EduCourseMapper.getPublishCourseInfo
at com.baomidou.mybatisplus.core.override.PageMapperMethod$SqlCommand.<init>(PageMapperMethod.java:261)
at com.baomidou.mybatisplus.core.override.PageMapperMethod.<init>(PageMapperMethod.java:58)
at com.baomidou.mybatisplus.core.override.PageMapperProxy.cachedMapperMethod(PageMapperProxy.java:70)
at com.baomidou.mybatisplus.core.override.PageMapperProxy.invoke(PageMapperProxy.java:63)
at com.sun.proxy.$Proxy96.getPublishCourseInfo(Unknown Source)
-
划重点: BindingException: Invalid bound statement (not found)
-
分析:意思就是出现了绑定异常,无效的绑定声明,或者说绑定找不到了。
-
然后再看问题出现的位置是在com.atguigu.eduservice.mapper.EduCourseMapper.getPublishCourseInfo,也就是mapper里边的一个方法。
-
因此问题就是说mapper里边的getPublishCourseInfo这个方法绑定的xml找不到了,或者说没有和xml里面的方法绑定上。
-
这是对应的方法的xml
<select id="getPublishCourseInfo" resultType="com.atguigu.eduservice.entity.vo.CoursePublishVo">
<!--此处省略sql语句-->
</select>
二、解决方案
2.1 出现问题的可能原因
- 可能原因1: 出现这个问题有可能是一个及其简单的失误,就是xml方法上的id没有和mapper的方法名保持一致,导致mapper的方法在执行的时候找不到对应的xml方法。如果是这个原因,就直接把xml对应的id修改过来就可以了。因此先检查一下是不是这个问题。
- 可能原因2: 编译完的代码target当中没有xml。这是由于xml文件放置的位置,以及maven默认的加载机制造成的。maven加载的时候,把java文件夹里面的java类型文件进行编译,如果其他类型的文件,不回加载。简单说就是,xml如果放在mapper的包下,默认不会被加载到target里面。这样编译完的代码在执行的时候就找不到xml,mapper的方法就无法和xml绑定上。
2.2 问题的解决(针对原因2)
2.2.1 方法1
将xml文件拷贝到对应的target文件夹中。
2.2.1 方法2
- 配置pom文件,这样maven在打包的时候会将java目录中的*.xml文件也进行打包(读者以自己的实际xml位置为准,做修改 )
<!-- 项目打包时会将java目录中的*.xml文件也进行打包 -->
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
<filtering>false</filtering>
</resource>
</resources>
</build>
- 配置application.properties文件,这样mapper就可以通过这项配置找到xml的位置(读者以自己的实际xml位置为准,做修改 )
#配置mapper xml文件的路径
mybatis-plus.mapper-locations=classpath:com/guli/edu/mapper/xml/*.xml