mybatis條件語句中帶數組參數的處理
mybatis條件語句中帶數組參數
如題,在mybatis編寫sql語句的時候,可能會遇到in這樣的關鍵字,我們知道in後面需要接上(‘a’,’b’,’c’)這樣的一個結構。它像一個數組,但是是用括號()包裹的,參數之間還有逗號隔開。
這裡因為數組參數是變量,直接通過拼接的方式不可行。
這裡需要一個標簽foreach,標簽可以有item,collection,open,close,separator等屬性,分別表示變量,變量集合,開始符號,結束符號,分隔符。
這裡給出一個示例
定義返回對象
<resultMap type="com.xxx.springmybatis.domain.User" id="UserResult"> <id column="id" jdbcType="BIGINT" property="id"/> <result column="name" jdbcType="VARCHAR" property="name"/> <result column="email" jdbcType="VARCHAR" property="email"/> </resultMap>
編寫sql語句
<select id="findByIds" resultMap="UserResult" parameterType="list"> select * from users where id in <foreach collection="list" item="id" open="(" close=")" separator=","> #{id,jdbcType=BIGINT} </foreach> </select>
定義dao方法:
package com.xxx.springmybatis.dao; import java.util.List; import com.xxx.springmybatis.domain.User; public interface UserMapper { User getById(Integer id); User getByName(String name); void save(User user); List<User> findByIds(List<Integer> ids); }
以上的示例,是通過id數組來查詢對應的用戶集合。我們傳入的用戶ID,最終在sql中會通過拼接的方式組成where id in (3,4)的條件。
如下所示,如果要查詢id為3,4的用戶,那麼打印的sql語句可以看出拼接的樣子:
這裡有必要說明的是foreach標簽中的collection屬性
1、List集合,默認使用list代表入參,數組,默認使用array作為入參。
2、如果傳入的參數是一個對象,對象User有個屬性List ids,那麼就使用ids作為入參。
3、如果接口聲明的地方通過註解@Param(“xx”)指定瞭入參,那麼list,array這種默認的參數就失效,這時候需要指定xx為入參。
本例中因為使用的是List集合傳入,所以默認就使用瞭list作為collection入參的鍵。
mybatis多參數傳遞(其中包括數組)
mapper接口
public void batchDelete(@Param(value = "activityId") Integer activityId, @Param(value = "userIds") Integer[] userIds);
mapper.xml的配置
<insert id="batchDelete"> delete from T_ACT_USERS where ACTIVITY_ID = #{activityId} and USER_ID in <foreach collection="userIds" item="item" index="index" open="(" separator="," close=")"> #{item} </foreach> </insert>
以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。
推薦閱讀:
- mybatis update更新字段的使用操作
- mybatis 如何利用resultMap復雜類型list映射
- MyBatis傳入參數為List對象的實現
- Mybatis中的@Select、foreach用法
- mybatis實現批量插入並返回主鍵(xml和註解兩種方法)