mybaties错误解决Invalid bound statement (not found): com.yealink.example.dao.UserMapper.getUserByUserInf

本文介绍了一个关于MyBatis中Mapper未被正确识别的问题,并提供了详细的排查及解决方案,包括调整Eclipse项目的编译路径设置和Maven工程的资源文件配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.错误:Invalid bound statement (not found): com.yealink.example.dao.UserMapper.getUserByUserInfo

二.解决过程

项目用spring+springMVC+mybatis;
我们发现他读不到userMapper.xml文件,后面查询在编译好的文件中,UserMapper.xml文件并没有引入进来,这就是导致出现这个问题的原因;

找到原因后我们在:选中项目 右击选中build path->configure build path->选中source,查看源文件下的Included:**/*.java ,表明编译后只把.java文件编译成.class后引入,其他的.xml文件不会引入,所以就会出现这个错误;

三.解决办法:将Included:**/*.java Remove掉

重新编译后发现.xml文件已经存在了,问题解决;

四.备注
但是如果你建立的是maven工程,每次用maven命令重新编译eclipse工程时,上述问题又会出现,因为Included:**/*.java为默认的,所以解决办法是在.pom文件中加入这一段配置
     <resources>
        	<resource>
        		<directory>src/main/java</directory>
        	</resource>
        	<resource>
        		<directory>src/main/resources</directory>
        	</resource>
        </resources>
意思是每次用maven编译时它会将src/main/java和src/main/resources下的所有文件都进行引入,所以问题完美解决;
<think>嗯,用户遇到了MyBatisInvalid bound statement错误,具体是com.dao.UserMapper.delUser未找到。我需要先分析可能的原因。首先,这个错误通常是因为MyBatis找不到对应的Mapper XML文件中的SQL语句。可能的原因有几个: 第一,检查XML文件是否存在,路径是否正确。用户的Mapper接口是com.dao.UserMapper,对应的XML应该在resources/com/dao目录下,且文件名应该是UserMapper.xml。如果路径或名字不匹配,就会找不到。 第二,XML里的namespace是否正确。namespace必须和Mapper接口的全限定名一致,即com.dao.UserMapper。如果这里写错了,也会导致绑定失败。 第三,检查方法名和SQL的id是否对应。用户的问题是关于delUser方法,所以XML里应该有一个<delete id="delUser">...</delete>的标签。如果id写成了deleteUser或者其他名字,就会不匹配。 第四,可能是构建工具的问题。比如Maven或Gradle没有正确复制XML文件到target目录。这时候需要检查构建配置,确保XML文件被包含在资源目录中。 第五,MyBatis的配置是否正确。比如在application.properties里有没有配置mybatis.mapper-locations,指向正确的XML路径。如果配置了但路径不对,同样会找不到。 第六,检查是否有多个同名Bean冲突。如果使用MyBatis-Plus,可能需要排除默认的MapperScannerConfigurer,避免覆盖配置。用户引用[4]提到需要配置扫描器,所以需要确认扫描的包是否正确,比如basePackage是不是com.dao。 另外,用户提供的引用[3]是UserService接口,里面有delUser方法,但问题出在UserMapper,可能需要确认Service层是否正确调用了Mapper的方法,或者是否存在事务管理的问题,但可能这不是主要原因,因为错误明确指向Mapper的绑定问题。 可能的解决步骤:首先确认XML文件的路径和名称,然后检查namespace和方法id是否正确,接着查看构建后的目录是否有XML文件,最后检查MyBatis的配置和扫描器设置。如果都正确,可能需要清理项目重新构建,或者检查依赖冲突。</think>### MyBatis中"Invalid bound statement not found com.dao.UserMapper.delUser"的解决方案 #### 1. 检查Mapper接口与XML文件的映射关系 - **XML文件路径**:确保`UserMapper.xml`文件位于`resources/com/dao`目录下,且文件名与接口名严格一致(区分大小写)[^2][^4]。 - **XML命名空间配置**:在XML文件中`<mapper>`标签的`namespace`属性必须与Mapper接口全限定名一致: ```xml <mapper namespace="com.dao.UserMapper"> ``` #### 2. 验证SQL语句ID匹配性 在XML文件中必须存在与接口方法名一致的SQL定义: ```xml <delete id="delUser"> DELETE FROM user WHERE id = #{id} </delete> ``` 注意`id="delUser"`需与接口方法`delUser(Integer id)`完全一致[^1]。 #### 3. 检查构建工具配置(以Maven为例) 在`pom.xml`中确保资源文件包含XML: ```xml <build> <resources> <resource> <directory>src/main/resources</directory> <includes> <include>**/*.xml</include> </includes> </resource> </resources> </build> ``` 构建后检查`target/classes/com/dao`目录下是否存在XML文件[^2][^5]。 #### 4. MyBatis配置验证(Spring Boot示例) 在`application.properties`中配置扫描路径: ```properties mybatis.mapper-locations=classpath*:com/dao/*.xml mybatis.type-aliases-package=com.example.entity ``` #### 5. 处理MyBatis-Plus的特殊情况 若使用MyBatis-Plus,需确保: - 在Spring配置中显式声明Mapper扫描路径: ```xml <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.dao"/> </bean> ``` - 避免与其他ORM框架的扫描器冲突。 #### 6. 代码层验证 确认Mapper接口定义正确: ```java public interface UserMapper { int delUser(Integer id); } ``` Service层调用应通过`@Autowired`注入Mapper实例[^3][^5]。 --- ###
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值