首頁 > 軟體

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

2022-07-11 18:03:57

@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}

以上為個人經驗,希望能給大家一個參考,也希望大家多多支援it145.com。


IT145.com E-mail:sddin#qq.com