mybatis條件語句中帶數(shù)組參數(shù)的處理
mybatis條件語句中帶數(shù)組參數(shù)
如題,在mybatis編寫sql語句的時(shí)候,可能會遇到in這樣的關(guān)鍵字,我們知道in后面需要接上('a','b','c')這樣的一個(gè)結(jié)構(gòu)。它像一個(gè)數(shù)組,但是是用括號()包裹的,參數(shù)之間還有逗號隔開。
這里因?yàn)閿?shù)組參數(shù)是變量,直接通過拼接的方式不可行。
這里需要一個(gè)標(biāo)簽foreach,標(biāo)簽可以有item,collection,open,close,separator等屬性,分別表示變量,變量集合,開始符號,結(jié)束符號,分隔符。
這里給出一個(gè)示例
定義返回對象
<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數(shù)組來查詢對應(yīng)的用戶集合。我們傳入的用戶ID,最終在sql中會通過拼接的方式組成where id in (3,4)的條件。
如下所示,如果要查詢id為3,4的用戶,那么打印的sql語句可以看出拼接的樣子:
這里有必要說明的是foreach標(biāo)簽中的collection屬性
1、List集合,默認(rèn)使用list代表入?yún)?,?shù)組,默認(rèn)使用array作為入?yún)ⅰ?/p>
2、如果傳入的參數(shù)是一個(gè)對象,對象User有個(gè)屬性List ids,那么就使用ids作為入?yún)ⅰ?/p>
3、如果接口聲明的地方通過注解@Param("xx")指定了入?yún)ⅲ敲磍ist,array這種默認(rèn)的參數(shù)就失效,這時(shí)候需要指定xx為入?yún)ⅰ?/p>
本例中因?yàn)槭褂玫氖荓ist集合傳入,所以默認(rèn)就使用了list作為collection入?yún)⒌逆I。
mybatis多參數(shù)傳遞(其中包括數(shù)組)
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>
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Springboot入門案例及部署項(xiàng)目的詳細(xì)過程
Spring Boot是由Pivotal團(tuán)隊(duì)提供的全新框架,其設(shè)計(jì)目的是用來簡化新Spring應(yīng)用的初始搭建以及開發(fā)過程,本文給大家分享一個(gè)入門案例使用Springboot1.5.9搭建,具體配置部署過程跟隨小編一起看看吧2021-07-07深入探討Druid動態(tài)數(shù)據(jù)源的實(shí)現(xiàn)方式
Druid是一個(gè)高性能的實(shí)時(shí)分析數(shù)據(jù)庫,它可以處理大規(guī)模數(shù)據(jù)集的快速查詢和聚合操作,在Druid中,動態(tài)數(shù)據(jù)源是一種可以在運(yùn)行時(shí)動態(tài)添加和刪除的數(shù)據(jù)源,使用動態(tài)數(shù)據(jù)源,您可以在Druid中輕松地處理不斷變化的數(shù)據(jù)集,本文講給大家介紹一下Druid動態(tài)數(shù)據(jù)源該如何實(shí)現(xiàn)2023-08-08SpringBoot使用MyBatis-Flex實(shí)現(xiàn)靈活的數(shù)據(jù)庫訪問
MyBatisFlex是一款優(yōu)秀的持久層框架,本文主要介紹了SpringBoot使用MyBatis-Flex實(shí)現(xiàn)靈活的數(shù)據(jù)庫訪問,具有一定的參考價(jià)值,感興趣的可以了解一下2024-06-06基于OpenID?Connect及Token?Relay實(shí)現(xiàn)Spring?Cloud?Gateway
這篇文章主要介紹了基于OpenID?Connect及Token?Relay實(shí)現(xiàn)Spring?Cloud?Gateway,Spring?Cloud?Gateway旨在提供一種簡單而有效的方式來路由到API,并為API提供跨領(lǐng)域的關(guān)注點(diǎn),如:安全性、監(jiān)控/指標(biāo)和彈性2022-06-06淺談異常結(jié)構(gòu)圖、編譯期異常和運(yùn)行期異常的區(qū)別
下面小編就為大家?guī)硪黄獪\談異常結(jié)構(gòu)圖、編譯期異常和運(yùn)行期異常的區(qū)別。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2016-09-09Spring?boot框架JWT實(shí)現(xiàn)用戶賬戶密碼登錄驗(yàn)證流程
這篇文章主要介紹了Springboot框架JWT實(shí)現(xiàn)用戶賬戶密碼登錄驗(yàn)證,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-06-06