idea中Mapper接口无法自动注入,报"Invalid bound statement (not found) "异常

本文详细介绍了在使用MyBatis框架时遇到的关于Mapper接口的问题及其解决方案,包括idea中配置引起的误导性提示及如何正确配置XML文件路径。

首先声明Mapper接口时,could not autowire,是因为idea的拼写检查,并不影响执行
Setting->Inspections->Spring->springCore->Code->Autowiring for Bean Class设置为nohighliting ,only fixed.即可
接下来的说”Invalid bound statement “异常,不能找到Mapper接口的代理类
1.检查了我的配置文件,没有问题
2.我看网上很多人说因为Idea不能编译resources目录下的XML文件,然后target下的classes目录下不会生成XML文件,需要在maven项目的pom文件build下加入以下配置

<build>     
    <resources>  
        <resource>  
            <directory>src/main/java</directory>  
            <includes>  
                <include>**/*.properties</include>  
                <include>**/*.xml</include>  
            </includes>  
            <filtering>false</filtering>  
        </resource>  
        <resource>  
            <directory>src/main/resources</directory>  
            <includes>  
                <include>**/*.properties</include>  
                <include>**/*.xml</include>  
            </includes>  
            <filtering>false</filtering>  
        </resource>  
    </resources>  
</build>  

可是我的target目下有XML等配置文件,所以不是这个问题,我使用的是IDEA 2017.2.6版本,我想idea应该新点的版本解决了这个问题.
我们知道Mybaties中,Mapper接口和XML配置文件需要在一个目录下。
3、最后我发现我的问题是:
这里写图片描述
我的resources下的文件建立错误了。
eclipse的resources下可以建立pacakge,但是Idea下不能,只能建立Directory,即目录.
所以我之前新建com.ray.mybbs.mapper.test,这显然是一个文件夹的名称。
正确的建立方式是com/ray/mybs/mapper/test,这样建立多级目录
被叽叽蠢哭
-.-…….
至此问题解决。

<think>好的,用户遇到了Java项目中service接口出现Invalid bound statement (not found)的错误,想要了解原因和解决方案。我需要结合提供的引用内容来分析。 首先,根据引用[1],这个错误通常是因为MyBatis找不到对应的SQL映射语句。可能的情况包括映射文件未定义、方法名不匹配、路径问题等。引用[2]提到后缀名的问题,用户可能将mapper命名为dao,而配置中期望的是mapper,导致找不到。引用[3]补充了方法名不一致、路径配置错误等情况,还提到了需要在application.properties中正确配置mapper路径。引用[4]虽然提到service层错,但实际原因可能在底层如mapper层。 接下来,我需要整理常见的原因和对应的解决方案。可能的原因包括:1. XML中的id与方法名不一致;2. XML文件未被正确扫描(路径或后缀问题);3. 接口与XML的包路径不一致;4. Maven未正确编译XML文件;5. MyBatis配置错误;6. 其他如命名空间错误。 解决方案需要逐一排查这些可能。例如检查方法名和XML的id是否一致,确保XML文件在正确路径下,配置mybatis.mapper-locations,检查Maven的pom.xml配置,处理命名空间等。同时,用户提到的例子中,修改后缀为mapper解决了问题,这也需要注意。 用户可能需要具体的步骤指导,比如如何检查XML文件的位置,如何配置mybatis的扫描路径,以及如何验证Maven是否正确打包了XML文件。此外,可能还需要提醒用户检查是否有拼写错误,因为这是常见的问题。 最后,确保回答结构清晰,分点列出原因和解决方案,方便用户逐步排查。同时,生成相关问题帮助用户深入理解其他可能的MyBatis问题。</think>### Java Service接口出现 Invalid bound statement (not found) 错误原因及解决方案 #### 错误原因分析 该错误表示 **MyBatis 无法找到与接口方法对应的 SQL 映射语句**,具体可能由以下原因导致: 1. **映射文件未正确关联** - XML 映射文件未定义对应方法的 SQL 语句(如缺少 `<select>`、`<insert>` 标签)[^1] - 接口方法名与 XML 映射文件中 SQL 语句的 `id` 不一致[^3] - XML 文件命名或路径不符合规范(如路径未匹配、文件名与接口名不一致)[^3] 2. **资源加载问题** - XML 文件未被 Maven 编译到 `target/classes` 目录(需检查 Maven 的 `<resources>` 配置) - MyBatis 未正确扫描 XML 文件(需检查 `mybatis.mapper-locations` 配置)[^3] 3. **接口与映射文件命名空间错误** - XML 映射文件的 `namespace` 未指向完整的 Java 接口路径 - 示例错误:`<mapper namespace="UserDao">` 正确应为:`<mapper namespace="com.example.dao.UserDao">` 4. **特殊配置冲突** - 使用 MyBatis-Plus 时,若 XML 文件后缀为 `.dao` 但配置中期望 `.mapper`,会导致路径不匹配[^2] - 多模块项目中未正确配置资源路径 --- #### 解决方案步骤 1. **检查方法名与 SQL ID 一致性** ```java // UserDao.java 接口方法 User selectUserById(Long id); ``` ```xml <!-- UserDao.xml 中必须存在匹配的 id --> <select id="selectUserById" resultType="User"> SELECT * FROM user WHERE id = #{id} </select> ``` 2. **验证 XML 文件路径** - 若 XML 文件在 `resources/mapper` 目录,需确保配置包含: ```properties # application.properties mybatis.mapper-locations=classpath:/mapper/*.xml ``` - 若使用非标准路径(如 `resources/com/example/dao`),需完整配置路径[^3] 3. **检查 Maven 资源过滤** 在 `pom.xml` 中添加: ```xml <build> <resources> <resource> <directory>src/main/resources</directory> <includes> <include>**/*.xml</include> </includes> </resource> </resources> </build> ``` 4. **命名空间验证** ```xml <!-- 正确示例 --> <mapper namespace="com.example.dao.UserDao"> ``` 5. **使用 IDEA 插件辅助排查** - 安装 **MyBatisX** 插件,可直观显示接口与 XML 的绑定关系 - 通过 `Ctrl+鼠标左键` 点击方法名,检查是否能跳转到 XML 中的 SQL 语句 --- #### 典型修复案例 引用案例[^2]中,因 XML 文件后缀为 `.dao` 但 MyBatis-Plus 配置期望 `.mapper`,通过以下修改解决问题: ```properties # 原错误配置 mybatis-plus.mapper-locations=classpath*:com/example/**/*.mapper.xml # 修改为 mybatis-plus.mapper-locations=classpath*:com/example/**/*.dao.xml ``` ---
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值