文章目錄
- 一、單個引數
- 二、多個引數,使用
@param
: - 三、多引數,基於引數順序
一、單個引數
1.1、只有一個引數時,使用
在動態SQL中,如果只有一個引數時,在xml檔案中使用#{value}
#{ value }
。
Mapper 介面:public interface UserMapper{ public List<SysUser> getUserList(String name); } <select id="getUserList" parameterType="java.lang.String" resultType="SysUser"> select t.* from sys_user t where t.name= #{value} </select>
1.2、Map 封裝多引數:
這個是最常見的,不多說了。
示例1:
資料:
HashMap <String, Object> params = new HashMap<String, Object>();
params.put("id", "1234");
params.put("code ", "ABCD");
Mapper 介面:
public interface UserMapper{
public List<SysUser> getUserList(Map params);
}
<select id="getUserList" parameterType="map" resultType="SysUser">
select t.* from sys_user t where id=#{id} and code = #{code}
</select>
示例2:(有比較複雜的引數)
如果引數既要包含 String 型別,又包含 List 型別,使用Map 來封裝引數。 其實就是與 1.3的內容。
將引數放入Map,再取出Map中的List遍歷。如下:
// 定義一個 map
Map<String, Object> params = new HashMap<String, Object>();
params.put("status", "0");
// List型別
List<String> ids= new ArrayList<String>();
ids.add("1");
ids.add("2");
params.put("ids", ids);
Mapper 介面:
public interface UserMapper{
public List<SysUser> getUserList(Map params);
}
<select id="getUserList" parameterType="map" resultType="SysUser">
select t.*
from sys_user t
WHERE t.status = #{status}
and t.id not in
<foreach collection="ids" item="item" index="index" open="(" close=")" separator=",">
#{item}
</foreach>
</select>
1.3、使用物件封裝多個引數
public class UserQueryVO {
private Integer id;
private String code;
// getter/setter....
}
Mapper 介面
public interface UserMapper{
public List<SysUser> getUserList(UserQueryVO userQueryVO);
}
<select id="getUserList" parameterType="com.xxx.entity.vo.UserQueryVO" resultType="SysUser">
select t.* from sys_user t where id=#{id} code = #{code}
</select>
1.4、List 封裝 in:
Mapper 介面:
public interface UserMapper{
public List<SysUser> getUserList(List<String> idsIn);
}
<select id="getUserList" resultType="SysUser">
select t.* from sys_user t
where id in
<foreach collection="idsIn" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</select>
foreach 最後的效果是 select 欄位… from XXX where id in (‘1’,’2’,’3’,’4’)
二、多個引數,使用 @param
:
2.1、一個引數
Mapper 介面:
public interface UserMapper{
public List<SysUser> getUserList(@param("id")String id);
}
<select id="getUserList" parameterType="java.lang.String" resultType="SysUser">
select t.* from sys_user t where t.id= #{id}
</select>
mapper.xml 中 #{id} 的 id ,對應的是 @param(“id”) 中指定的名稱 id ,而不是String id 的 id 。
2.1、多個引數(重點)
資料:
// List型別
List<String> ids= new ArrayList<String>();
ids.add("1");
ids.add("2");
params.put("ids", ids);
String code = "1";
Mapper 介面:
public interface UserMapper{
public List<SysUser> getUserList(@Param("idIn")String ids, @Param("codeStr ")String code);
}
多引數時,@Param() 中指定引數的名稱,在 mapper.xml 中引用
xml 對映檔案:
<select id="getUserList" resultType="SysUser">
select t.*
from sys_user t
where id in
<foreach collection="idIn" item="item" open="(" separator="," close=")">
#{item}
</foreach>
and code= #{ codeStr }
</select>
三、多引數,基於引數順序
public interface UserMapper{
public List<SysUser> getUserList(String id , String code);
}
不需要寫 parameterType 引數。
<select id="getUserList" resultType="SysUser">
select t.* from sys_user t
where id = #{0} and name = #{1}
</select>
這裡不再使用引數名,使用索引,即 #{ index }。index 索引從 0 開始遞增。
本作品採用《CC 協議》,轉載必須註明作者和本文連結