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>

由於一個數據庫只是查詢,所以這邊並沒有配置事務。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM