Mybatis中傳遞多個參數的方法總結


一、單個參數:

public List<XXBean> getXXBeanList(String xxCode);  

<select id="getXXXBeanList" parameterType="java.lang.String" resultType="XXBean">

  select t.* from tableName t where t.id= #{id}  

</select>  

其中方法名和ID一致,#{}中的參數名與方法中的參數名一直, 我這里采用的是XXXBean是采用的短名字,

select 后的字段列表要和bean中的屬性名一致, 如果不一致的可以用 as 來補充。



二、多參數:
public List<XXXBean> getXXXBeanList(String xxId, String xxCode);  

<select id="getXXXBeanList" resultType="XXBean">

  select t.* from tableName where id = #{0} and name = #{1}  

</select>  

#{}里面的數字代表你傳入參數的順序。 由於是多參數那么就不能使用parameterType, 改用#{index}是第幾個就用第幾個的索引,索引從0開始


@Param注解傳參法
public AddrInfo getAddrInfo(@Param("corpId")int corpId, @Param("addrId")int addrId);
 
xml配置這樣寫:
 
<select id="getAddrInfo"  resultMap="com.xxx.xxx.AddrInfo">
       SELECT * FROM addr__info 
    where addr_id=#{addrId} and corp_id=#{corpId} </select> 以前在<select>語句中要帶parameterType的,現在可以不要這樣寫。

三、Map封裝多參數:
public List<XXXBean> getXXXBeanList(HashMap map);  

<select id="getXXXBeanList" parameterType="hashmap" resultType="XXBean">

  select 字段... from XXX where id=#{xxId} code = #{xxCode}  

</select>  

 

四、Java Bean傳參法

#{}里面的名稱對應的是 User類里面的成員屬性。

這種方法很直觀,但需要建一個實體類,擴展不容易,需要加屬性,看情況使用。

 

 五、JSONObject參數

<select id="listSelective" parameterType="com.alibaba.fastjson.JSONObject" resultType="com.alibaba.fastjson.JSONObject">
SELECT c.*
FROM car AS c
WHERE 1=1
<if test="id != null and id != ''">
and c.id= #{id}
</select>  

Mapper:
List<JSONObject> listSelective(JSONObject params);

 

 六、List封裝in:

public List<XXXBean> getXXXBeanList(List<String> list);  

<select id="getXXXBeanList" resultType="XXBean">
  select 字段... from XXX where id in
  <foreach item="item" index="index" collection="list" open="(" separator="," close=")">  
    #{item}  
  </foreach>  
</select>  

foreach 最后的效果是select 字段... from XXX where id in ('1','2','3','4') 




簡單來說是以下規則:

1、如果傳遞過來是單參數,且沒有以@Param注解進行命名,則直接將單參數作為真實的參數調用SqlSession的對應方法。

2、如果傳遞過來的不是單參數或者是包含以@Param注解進行命名的參數,則會將對應的參數轉換為一個Map進行傳遞。具體規則如下:

      2.1、 會把對應的參數按照順序以param1、param2、paramN這樣的形式作為Key存入目標Map中,第一個參數是param1,第N個參數是paramN。

      2.2、 如果參數是以@Param注解命名的參數,則以@Param指定的名稱作為Key存入目標Map中。

      2.3、 如果參數不是以@Param注解命名的,則按照順序以0、1、N這樣的形式作為Key存入目標Map中,第一個參數是0,第N個參數是N。

 
       


免責聲明!

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



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