Idea中运行Maven/Gradle项目报错Invalid bound statement (not found): com.xx.dao.SysSettingMapper.findAll()

前言

1.Maven/Gradle默认的web目录结构

若我们没有在pom.xml/build.gradle中显示设置resources/sourceSets,则Maven/Gradle默认的项目目录结构:

src
	main
		java   			// source 根目录
		resources 		// resources 根目录
	test
		java			// test source 根目录
		resources  		// test resources 根目录

在gradle中,等效于在build.gradle里有以下配置:

sourceSets {
    main {
        java {
            srcDirs = ['src/main/java']
        }
        resources {
            srcDirs = ['src/main/resources']
        }
    }
    test {
        java {
            srcDirs = ['src/test/java']
        }
        resources {
            srcDirs = ['src/test/resources']
        }
    }
}

当然,我们可以不使用默认的目录结构,这是就需要自定义sourceSets,譬如:

sourceSets {
    main {
        java {
            srcDirs = ['src/java']
        }
        resources {
            srcDirs = ['src/resources']
        }
    }
}

若我们只是想在默认的sourceSets的基础上新增一些目录,就可以这么写:

sourceSets {
    main {
        java {
            srcDir 'otherDir/src/main/java'
        }
    }
}

问题

Caused by: org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.xx.dao.SysSettingMapper.findAll
	at org.apache.ibatis.binding.MapperMethod$SqlCommand.<init>(MapperMethod.java:189)
	at org.apache.ibatis.binding.MapperMethod.<init>(MapperMethod.java:43)
	at org.apache.ibatis.binding.MapperProxy.cachedMapperMethod(MapperProxy.java:58)
	at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:51)
	at com.sun.proxy.$Proxy38.findAll(Unknown Source)
	at com.xx.service.impl.SysSettingServiceImpl.findAllSysSetting(SysSettingServiceImpl.java:30)

原因

报错的原因时因为在编译输出目录没有找到mapper文件
在这里插入图片描述
mapper文件在源码中的src/main/java中:
在这里插入图片描述

那么我们的mapper文件为什么没有被编译输出呢?因为idea在构建Maven/Gradle项目时,默认只会编译src/main/java下的java文件和src/main/resource的资源文件。而src/main/java下的资源文件会被忽略!

解决

Maven中

[pom.xml]

<resources>
	<resource>
  		<!--- 指定目录 ---->
    	<directory>src/main/java</directory>
    	<includes>
   			<!--- 指定xml文件---->
      		<include>**/*.xml</include>
    	</includes>
    	<filtering>false</filtering>
  	</resource>
</resources>

Gradle中

Idea中Gradle插件的“Build and run“设置项,文章中名为"mapperXmlCopy"的task

总结

所以为了避免这个问题导致浪费时间,最好不要将mapper文件放在java目录下,而是放在resources目录下。

其它

参考https://blog.csdn.net/Icannotdebug/article/details/83081745
参考https://blog.csdn.net/qq_43519310/article/details/89388068

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值