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。
推薦閱讀:
- Mybatis中@Param註解的用法詳解
- Spring整合Mybatis的全過程
- Mybatis省略@Param註解原理分析
- mybatis Mapper的xml文件中resultType值的使用說明
- 解讀Mapper與Mapper.xml文件之間匹配的問題