一、單個參數:
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。
