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