mybatis中@Param註解總是報取不到參數問題及解決

@Param註解總是報取不到參數

springboot+mybatis項目中,在mapper 層傳多個參數,請求時總是報參數取不到,快瘋瞭,我發誓xml層沒問題,mapper層參數名也沒問題

錯誤如下

百度瞭好久,一直讓我檢查.xml文件是否存在問題,各種方法都嘗試遍瞭,沒用。。。

最後檢查來檢查去發現自己@param註解包導錯瞭,param註解應該用的是ibatis包的,而我導錯瞭,如下:


 

我用的idea工具開發,直接alt+回車鍵快捷導入包,沒太註意引錯瞭,編譯也沒報錯,坑。。。。

應該導入:import org.apache.ibatis.annotations.Param,ibatis是mybatis的前身,mybatis是由ibatis發展而來。

註意:

其實就是個很小的問題,還有個需要註意的就是在mapper 層,如果隻有一個參數不需要@param註解,如果有多個參數,必須要@param()註解,指明每個參數的參數名,否則也會報找不到參數問題,因為 mybatis註解配置使用ognl表達式,這樣才能正常的通過註解傳值和取值多個參數的問題。

@Param註解詳細使用方法

1.@Param這個註解是用來解決接口方法有多個參數時

xxMapper.xml文件綁定參數混淆問題。

需要在DAO方法形參前面添加@Param(“xxx”),來區分不同的需要綁定到xxMapper.xml的參數。

註意雙引號裡的值要與xxMapper.xml中#{}中的值相等,如:

DAO方法:

public void list (@Param(“abc1”) String abc1, @Param(“abc2”) String abc2);

xxMapper.xml中:

values(#{abc1},#{abc2}

2.可以修飾JavaBean對象、Map集合等

如:

public void list (@Param(“param”) User user);

xxMapper.xml中:

where username = #{param.userName}
List getUser(@Param(“param”) Map map);

xxMapper.xml中values:

(#{param.id},#{param.name},#{param.age},#{param.sex})

3.@Param參數其實可加可不加

不加的話按照順序依次取出,如參數User user中userName和password的值添加到#{userName}#{password}。

但是當DAO方法裡多個參數沒有封裝在一個Javabean中時,則必須加。或者DAO方法參數裡有一個以上的JavaBean、集合等情況下也必須加,如:

@Param(“user”) User user, @Param(“example”) Map map

4.使用@Param註解好處

方法參數名可以不與xxMapper.xml一致,但是註意@Param("")裡面的值要與要與xxMapper.xml中#{}裡的值一致就可以瞭,如:

@Param(“user123”) User user
#{user123.userName}

以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。

推薦閱讀: