Mybatis Spring 报错:Invalid bound statement (not found): com.Spring.Mapper.UserMapper.SearUser【已解决】

本文解决了Spring与MyBatis整合时出现的资源绑定错误问题。主要原因是配置文件中的mapperLocations属性设置不当导致扫描路径不正确。通过修正配置或直接在MyBatis配置文件中指定mapper.xml文件位置来解决问题。

Spring MyBatis无法绑定资源错误

错误代码如下:

org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.Spring.Mapper.UserMapper.SearUser

	at org.apache.ibatis.binding.MapperMethod$SqlCommand.<init>(MapperMethod.java:227)
	at org.apache.ibatis.binding.MapperMethod.<init>(MapperMethod.java:49)
	at org.apache.ibatis.binding.MapperProxy.cachedMapperMethod(MapperProxy.java:65)
	at org.apache.ibatis.binding.MapperProxy.invoke(MapperProxy.java:58)
	at com.sun.proxy.$Proxy15.SearUser(Unknown Source)
	at com.Spring.Service.UserServiceImpl.SearUser(UserServiceImpl.java:19)
	at SpringTest.test2(SpringTest.java:26)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47)
	at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
	at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44)
	at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
	at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70)
	at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
	at org.junit.runners.Suite.runChild(Suite.java:127)
	at org.junit.runners.Suite.runChild(Suite.java:26)
	at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
	at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
	at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
	at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
	at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
	at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
	at org.junit.runner.JUnitCore.run(JUnitCore.java:160)
	at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:69)
	at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:33)
	at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:220)
	at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:53)

在整合MyBatis 与Spring时报错,找了很久没有找到,xml的和接口的绑定名称也一致最后发现问题如下:

我的mapper是在Spring的配置文件进行绑定的,使用的是全局搜索,

错误原因是因为扫描路径的冒号前少写一个*号

    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!-- 注入数据源 -->
        <property name="dataSource" ref="dataSource" />
        <!-- 读取映射文件 ,MyBatis的纯注解不用配置 -->
        <property name="mapperLocations">
            <array>
                <value>classpath*:*Mapper.xml</value>
            </array>
        </property>
        <!-- 配置mybatis-config.xml主配置文件(注配置文件可以保留一些个性化配置,缓存,日志,插件) -->
        <property name="configLocation" value="classpath:mybatis-config.xml" />
    </bean>

如果实在Spring的配置文件中进行绑定mapper.xml 一定要在classpath后面加*号

<value>classpath*:*Mapper.xml</value>

解决方法二

将mapper.xml文件绑定至MyBatis的配置文件中

代码如下:

    <mappers>
        <mapper resource="UserMapper.xml"></mapper>
    </mappers>

resources中写入路径问题方可解决

解决方法三

检查XML文件中所有绑定的包名、接口名

当你在使用Maven集成MyBatis-Plus时遇到这个错误,它通常意味着MyBatis无法找到你指定的Mapper接口的映射方法。在这个例子中,`com.hlw.yx.mapper.GasClientMapper.getinfo`是一个无效的bound statement,也就是找不到对应的SQL语句。 解决这个问题的步骤包括: 1. **检查Mapper接口**:确认`GasClientMapper`接口是否存在,并且其中是否有一个名为`getinfo`的方法。如果方法名拼写错误、大小写不符或者注解配置有误,MyBatis都不会识别。 ```java // 示例Mapper接口 public interface GasClientMapper { ResultInfo getinfo(@Param("id") Long id); // 确保方法名和参数匹配 } ``` 2. **Mapper XML配置文件**:在`src/main/resources/mapper`目录下的相应XML文件(例如`GasClientMapper.xml`)中,确认`getinfo`方法是否有正确的映射配置。比如,如果有动态SQL,需要确保SQL语句语法正确。 ```xml <mapper namespace="com.hlw.yx.mapper.GasClientMapper"> <select id="getinfo" resultType="com.example.ResultInfo"> SELECT * FROM table_name WHERE id = #{id} </select> </mapper> ``` 3. **路径和命名空间**:检查Mapper的namespace是否与实际包名一致。如果Mapper的位置或名称改变,记得更新Mapper XML的namespace属性。 4. **别名或者全限定名**:确认你在代码中引用Mapper时使用的全限定名是否正确,有时候可能会因为工程结构更改而引入了混淆。 5. **重启项目**:有时候可能是缓存的问题,尝试清理Maven项目的本地仓库并重新构建。 如果你已经检查过以上所有地方还是出现问题,可能需要查看具体的错误堆栈信息来获取更详细的错误原因。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值