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>
錯誤原因是:
正確寫法
<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>