Mybatis綁定錯誤的原因

      Mybatis常會出現下面異常,這一般是xml映射文件有錯誤。但是這個提示不一定準確,以致網上有些資料說這個問題很奇怪。出現這個錯誤一般的解決方式在下面有說明:
http://blog.csdn.net/softwarehe/article/details/8889206

org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)

一般的原因是Mapper interface和xml文件的定義對應不上,需要檢查包名,namespace,函數名稱等能否對應上,需要比較細緻的對比,我經常就是寫錯了一兩個字母搞的很長時間找不到錯誤

按以下步驟一一執行:
1:檢查xml文件所在的package名稱是否和interface對應的package名稱一一對應
2:檢查xml文件的namespace是否和xml文件的package名稱一一對應
3:檢查函數名稱能否對應上
4:去掉xml文件中的中文註釋
5:隨意在xml文件中加一個空格或者空行然後保存

一般來說到此就可以排除錯誤了。

      以上步驟除第5步,其他步驟沒什麼問題。第5步看起來這麼怪異的解決方式,實際上是觸發了ide的自動編譯功能。由於xml文件在編譯的時候,不一定總能立即從源目錄複製到class文件的編譯目錄(MyEclipse經常出這個問題),有時候你源目錄中的xml文件已經修改好了,而class所在的目錄裏面還是舊的。因此真正確定有效的方式是將正確的xml文件複製到class輸出目錄。

      還有種情況會出這個錯誤,比如配置xml映射文件需要滿足特定要求
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"
          p:dataSource-ref="dataSource" 
          p:configLocation="classpath:mybatis-config.xml">
        <property name="mapperLocations">
            <list>
                <value>classpath*:mapper/com/xxx/**/*Mapper.xml</value>
                <value>classpath*:dao/com/xxx/**/*Mapper.xml</value>
            </list>
        </property>
    </bean>
如上只有Mapper結尾的xml文件纔會被Mybatis掃描到,這個時候如果忘記了這個規則,xml使用了其他名稱,如xxxDao.xml。這樣xml的配置就不會加入到Mybatis存儲配置的一個map對象裏去,也會出現 Invalid bound statement 的錯誤。解決方法就是把xml文件改名即可。
發佈了171 篇原創文章 · 獲贊 287 · 訪問量 99萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章