Mybatis配置问题解决Invalid bound statement (not found)

首先这个异常的原因是系统根据Mapper类的方法名找不到对应的映射文件。

网上也搜索了到了类似的文章,一般可以从以下几个点排查:

  • mapper.xml的namespace要写所映射接口的全称类名,而且要和Mapper类对应好!
  • mapper.xml中的每个statement的id要和接口方法的方法名相同
  • mapper.xml中定义的每个sql的parameterType要和接口方法的形参类型相同
  • mapper.xml中定义的每个sql的resultType要和接口方法的返回值的类型相同
  • mapper.xml要和对应的mapper接口在同一个包下
  • mapper.xml的命名规范遵守: 接口名+Mapper.xml

原文链接:https://www.cnblogs.com/ewwwe/p/6181872.html

悲催的是笔者的项目把以上都排查过了还是不行。于是再去检查配置文件。

这里要特别说明的一下是,我们的项目要连接2个数据源。1个数据源只是查询,另1个数据库要进行更新。

经过检查,原来是2个Mybatis的扫描包路径存在了包含关系导致的!

<property name="basePackage" value="com.kedacom.scm.dao.mes.mybatis" />

然后我把1个数据源的mapper类从原来的路径底下剥离开来,问题终于解决!!!

顺便放一下2个数据源的完整配置,以供参考。数据源一的Mybatis配置。

    <bean id="sqlSessionFactoryBean" class="org.mybatis.spring.SqlSessionFactoryBean" lazy-init="true">
        <property name="dataSource" ref="dataSource" />
        <!-- 自动扫描entity目录, 省掉Configuration.xml里的手工配置 -->
        <property name="typeAliasesPackage" value="com.kedacom.scm.model" />
        <!-- 显式指定Mapper文件位置 -->
        <property name="mapperLocations">
            <list>
                <value>classpath:/mapper/*.map.xml</value>
                <value>classpath*:/security/map/*.map.xml</value>
            </list>
        </property>
        <property name="configLocation" value="classpath:/conf/mybatis-configuration.xml" />
        <property name="plugins">
            <array>
                <bean class="com.kedacom.mybatis.ext.PageHelper">
                    <property name="properties">
                        <value>
                            dialect=${jdbc.dbType}
                            offsetAsPageNum=true
                            rowBoundsWithCount=true
                            pageSizeZero=true
                            reasonable=true
                            firstPageIsZero=true
                            sortNamingStrategy=default
                        </value>
                    </property>
                </bean>
            </array>
        </property>
    </bean>

    <!-- 扫描basePackage下所有以@MyBatisRepository标识的 接口-->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <!-- 如果有多个数据源,这边的扫描包路径不能重合-->
        <property name="basePackage" value="com.kedacom.security.dao,com.kedacom.scm.dao.mybatis" />
        <property name="annotationClass" value="com.kedacom.core.annotion.MyBatisRepository"/>
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactoryBean" />
    </bean>

另一个数据源配置:

 1     <bean id="sqlSessionFactoryBean4Mes" class="org.mybatis.spring.SqlSessionFactoryBean" lazy-init="true">
 2         <property name="dataSource" ref="dataSourceMes" />
 3         <!-- 自动扫描entity目录, 省掉Configuration.xml里的手工配置 -->
 4         <property name="typeAliasesPackage" value="com.kedacom.scm.model" />
 5         <!-- 显式指定Mapper文件位置 -->
 6         <property name="mapperLocations">
 7             <list>
 8                 <value>classpath*:/mapper/mes/*.map.xml</value>
 9             </list>
10         </property>
11         <property name="configLocation" value="classpath:/conf/mybatis-configuration.xml" />
12         <property name="plugins">
13             <array>
14                 <bean class="com.kedacom.mybatis.ext.PageHelper">
15                     <property name="properties">
16                         <value>
17                             dialect=${jdbc.dbType}
18                             offsetAsPageNum=true
19                             rowBoundsWithCount=true
20                             pageSizeZero=true
21                             reasonable=true
22                             firstPageIsZero=true
23                             sortNamingStrategy=default
24                         </value>
25                     </property>
26                 </bean>
27             </array>
28         </property>
29     </bean>
30
31     <!-- 扫描basePackage下所有以@MyBatisRepository标识的 接口-->
32     <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
33         <!-- 如果有多个数据源,这边的扫描包路径不能重合-->
34         <property name="basePackage" value="com.kedacom.scm.dao.mes.mybatis" />
35         <property name="annotationClass" value="com.kedacom.core.annotion.MyBatisRepository"/>
36         <property name="sqlSessionFactoryBeanName" value="sqlSessionFactoryBean4Mes" />
37     </bean>

由于一个数据库只是查询,所以这边并没有配置事务。

原文地址:https://www.cnblogs.com/namelessmyth/p/9251870.html

时间: 2024-08-06 15:08:16

Mybatis配置问题解决Invalid bound statement (not found)的相关文章

[mybatis] mybatis错误:Invalid bound statement (not found)

点击菜单抛出异常: org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.misscandy.inter.UserMapper.findAllUsers org.springframe

mybatis 异常处理:Invalid bound statement (not found)

mybatis 的使用过程中提示错误: org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.msunsoft.mapper.HisLisReportMapper.getMaxMtcData 含义:HisLisReportMapper的getMtcData方法没有找到或者没有绑定 背景: 1.HisLisReportSyncWorker 控制类中 String hospitalCo

springboot+mybatis报错Invalid bound statement (not found)

今天做项目时报了一个错提示说Invalid bound statement (not found),也就是说mapper接口绑定.xml文件出错了,找不到指定的sql:原因是程序没有把.xml文件编译到classes路径下,这时需要在pom.xml文件的<build>标签中加入下面的配置解决<resources> <!-- maven项目中src源代码下的xml等资源文件编译进classes文件夹, 注意:如果没有这个,它会自动搜索resources下是否有mapper.xm

MyBatis笔记:invalid bound statement (not found)

maven项目在本地运行的时候没有问题,一旦把war包部署到测试机上就不能运行.查看了一下tomcat日志发现抛出这样的错误:invalid bound statement (not found),后面是找不到某个Mapper类等等. 经提醒解压war包,发现WEB_INF/classes/dao/mapper下面根本没有包含相应的xml文件.修改pom.xml,在<build>结点里加入以下语句 <resources> <resource> <directory

mybatis错误:Invalid bound statement (not found)

解决办法是去看看mybatis配置里面的可能因为配置为什么格式文件解析不到 <property name="mapperLocations" value="classpath*:com/******/mappers/*Mapper.xml"></property> 或者路径问题,导致该文件无法解析.

MyBatis 诡异的Invalid bound statement not found 错误

自从开始使用Maven管理项目,最近在配置MyBatis的Mapper,在Eclipse上调试时都是正常的,但是最近把项目迁移到 IntelliJ IDEA 上后发现不管是直接用Jetty调试,还是打成war发布均报错. 根据错误提示初步判断是配置的问题,检查的Spring和MyBatis所有配置文件,甚至在SVN上回退了代码,可问题均没有解决:无奈暂时换回了Eclipse继续Coding- 一直怀疑是迁移至IntelliJ IDEA造成的问题,于是自己新建了个Maven项目,调试MyBatis

mybatis绑定错误-- Invalid bound statement (not found)

错误截图 分析原因 首先,给定的异常提示信息并不精准,有多个错误原因都会抛出该异常.mybatis出现这个问题,通常是由Mapper interface和对应的xml文件的定义对应不上引起的,这时就需要仔细检查对比包名.xml中的namespace.接口中的方法名称等是否对应.我之前就因为称忘记在xml标签的id属性中添加方法名或写错方法名而出现这个错误. 出现这个错误时,按以下步骤检查一般就会解决问题:1:检查xml文件所在package名称是否和Mapper interface所在的包名一一

MyBatis: Invalid bound statement (not found)错误的可能原因

MyBatis: Invalid bound statement (not found)错误的可能原因 其他原因导致此问题解决参考: 1.检查 xml 文件所在 package 名称是否和 Mapper interface 所在的包名一致 <mapper namespace="com.xiaopengwei.mapper.UserInfoMapper"> mapper 的 namespace 写的不对!!!注意系修改. 2.UserDao 的方法在 UserDao.xml

关于mybatis Invalid bound statement (not found) 问题

初学mybatis   现在系统是spring + mybatis  applicationContext.xml里面配置了Mapper 自动扫描 <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">    <property name="basePackage" value="com.yolly.platform.*" /></bean&g