@Param:在Mybatis中的使用


1.如果mapper接口里參數是兩個普通參數;如下:

public List<student> selectuser(int pn ,String i);

<select id="selectuser" resultType="com.user.entity.student">
SELECT * FROM student
where sname like concat(concat("%",#{1}),"%")
LIMIT #{0} ,5
</select>

那么xml里只能用#{0},#{1}表示第一個參數和第二個參數的方式,但這樣的表達方法,不利於后期的維護。此時可以用@Param的注解來修飾參數。xml里看起來也比較方便,否則一堆0,1,2、3、4這樣不容易理解。如可以使用這樣來實現:

public List<student> selectuser(@Param(value = "page")int pn ,@Param(value = "str")String i);

這樣在Mapper中就可以使用value="page"這里面的值了。

<select id="selectuser" resultType="com.user.entity.student">
SELECT * FROM student
where sname like concat(concat("%",#{str}),"%")
LIMIT #{page} ,5
</select>

=====================================================================

2.如果傳入的參數只有一個,基本上不用@Param這個注解了。正常用

public List<student> selectuser(int pn);

直接用:

<select id="selectuser" resultType="com.user.entity.student">
SELECT * FROM student
<!--where sname like concat(concat("%",#{st.sname}),"%")-->
LIMIT #{page} ,5
</select>

====================================================================

3,如果傳入的參數是基本類型參數和實體類對象。

public List<student> selectuser(@Param(value = "page")int pn ,@Param(value = "st")student student);

<select id="selectuser" resultType="com.user.entity.student">
SELECT * FROM student
where sname like concat(concat("%",#{st.sname}),"%")
LIMIT #{page} ,5
</select>

4.如果傳入的參數是List參數。

數據接口層:

public int deleteBatch(@Param("ids")List<String>  ids);

mapper層:

<delete id="deleteBatch">
DELETE FROM s_user
WHERE id in
<foreach item="ids" collection="ids" open="(" separator=","close=")">
#{ids}
</foreach>
</delete>

=================================================

這里說下羅列下

mybatis傳入List參數或者單個String 參數等問題

一:在Userdao里面定義一個方法

 public int deleteBatch(List<String>  ids);

在對應的UserDao.xml

錯誤寫法

<delete id="deleteBatch">
DELETE FROM s_user
WHERE id in
<foreach item="ids" collection="ids" open="(" separator=","close=")">
#{ids}
</foreach>
</delete>

錯誤原因是:

你可以傳遞一個 List 實例或者數組作為參數對象傳給 MyBatis。當你這么做的時 候,MyBatis 會自動將它包裝在一個 Map 中,用名稱在作為鍵。List 實例將會以“list” 作為鍵,而數組實例將會以“array”作為鍵。

正確寫法

<delete id="deleteBatch">
DELETE FROM s_user
WHERE id in
<foreach item="ids" collection="list" open="(" separator=","close=")">
#{ids}
</foreach>
</delete>

2:你也可以使用@Param("ids") 來指定參數名稱,如以下寫法正確

Userdao.java

 public int deleteBatch(@Param("ids")List<String>  ids);

UserDao.xml

<delete id="deleteBatch">
DELETE FROM s_user
WHERE id in
<foreach item="ids" collection="ids" open="(" separator=","close=")">
#{ids}
</foreach>
</delete>

這樣則正確。

二:如果你的入參只有一個參數並且類型是String,則需要注意:

UserDao,java

public int delete(String  id);

在對應的UserDao.xml

錯誤寫法

<delete id="delete">
DELETE FROM s_user
WHERE id =#{id}
</delete>

正確寫法

<delete id="delete">
DELETE FROM s_user
WHERE id =#{_id}
</delete>

原因是:Mybatis 對於傳入的參數是單個string類型的參數的時候,明確表示要用:#{_parameter}這樣的格式才能夠獲取到傳入參數的值。

2.你還可以@Param("id") 來指定參數名稱,如以下寫法正確

Userdao.java

 public int delete(@Param("id")String id);

UserDao.xml

<delete id="delete">
DELETE FROM s_user
WHERE id =#{id} 
</delete>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM