mybatis接口綁定失效的解決
mybatis接口綁定失效
出現錯誤:
org.apache.ibatis.binding.BindingException: Invalid bound statement (not found):
解釋:這是mybatis所報的異常,意思是接口綁定失效
原因:
1.項目編譯完成後mapper接口和mybatis的xml不在同一個目錄下導致接口綁定失敗。
2.如果是maven工程,使用idea編輯工程,會出現xml文件無法被編譯到target當中,這種情況有兩種解決,首先將和mapper接口在一起的xml文件放在resources文件夾下,這種情況下需要將xml文件所在的包名改成和mapper所在包名一致,還有一種情況就是在pom文件中將xml文件所在的目錄標記為資源路徑。
3.配置文件的路徑寫的有問題,在spring整合mybatis配置中指定mybatis的xml路徑出錯尤其註意如果如果resources包下和java包下路徑相同一定要在路徑前加classpath:來區別兩者的不同,不然也會出現接口綁定失效的問題。
4.mybatis的xml文件中標簽的namespace和對應mapper接口的全限定類名(包名+類名,不含類的後綴名)不一致
5.mybatis的xml文件中標簽的id與對應mapper接口中的方法名不一致
與對應mapper接口中的方法名不一致**
小結一下
大體總結為mapper接口和xml之間關聯出錯,還有就是配置文件對xml所在文件路徑指定錯誤,最後就是在編譯後mapper接口和mybatis的xml不在同一個文件夾中。
mybatis接口綁定方法
通常情況下,使用Mapper.xml是無法實現多個參數的傳遞,除非傳入Map或者是對象,這個時候我們就可以使用接口綁定的方法傳入多個參數,
實現方法
第一步:創建一個與XML包名,類名完全相同的接口,包名類名即XML中配置的namespace
第二步:創建一個與XML中ID相同的方法,然後設置參數,
public interface LogMapper { List<Log> selAll(); }
第三步:在 mybatis.xml 中使用<package>進行掃描接口和 mapper.xml
<mappers> <package name="com.bjsxt.mapper"/> </mappers>
在XML中傳遞參數
因為有多個參數,所以在XML中參數的返回值可以不用寫, 但是在傳參的時候。
第一種方法:可以在SQL語句中加入#{0} #{param1}就可以傳遞參數
第二種方法: 使用註解傳遞參數,
第一步 : 在函數的參數前添加註解
List<Log> selByAccInAccout(@Param("accin") String accin123,@Param("accout") String accout3454235);
第二步: #{} 裡面寫@Param(“內容”)參數中
<!-- 當多參數時,不需要寫 parameterType --> <select id="selByAccInAccout" resultType="log" > select * from log where accin=#{accin} and accout=#{accout} </select>
這就相當於是系統底層給我們也註釋中寫的字符串為Key 以形參為value 形成一個key然後傳遞給XML 這就實現瞭多個參數的傳遞
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。
推薦閱讀:
- 淺談MyBatis執行SQL的兩種方式
- mybatis Mapper的xml文件中resultType值的使用說明
- mybatis 運行時加載自定義mapper文件方式
- MyBatis Mapper.xml中的命名空間及命名方式
- MyBatis在DAO層定義接口返回類型泛型無效的解決