溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

sql中傳入一個(gè)list,返回一個(gè)list

發(fā)布時(shí)間:2020-07-19 12:38:17 來(lái)源:網(wǎng)絡(luò) 閱讀:8750 作者:建波李 欄目:MySQL數(shù)據(jù)庫(kù)
-----------傳入數(shù)組------返回list<string>----------

String[] sendPersonIdArr = sendPersonId.split(",");
List<String> list = staffInfoService.ListPhonesByIds(sendPersonIdArr);


<!-- 通過(guò)userIds查詢(xún)員工的電話(huà)-->
	<select id="ListPhonesByIds" parameterType="String" resultType="String">
	 	SELECT h.telphone from hr_staff_info h left JOIN sys_user u on h.STAFFINFO_ID=u.STAFF_ID where 
 			u.id in  
 			<foreach collection="array" index="index" item="item" open="(" separator="," close=")">
				 #{item}
			</foreach>
	</select>

-----傳入List<string>----返回List<User>------
 
public List<User> findByUserIdList(List<String> userlist) throws Exception {
	return (List<User>) dao.findForList("UserMapper.findByUserIdList", userlist);
}

<!-- 通過(guò)userId的list來(lái)查詢(xún)userlist -->
	<select id="findByUserIdList" parameterType="java.util.List" resultMap="userResultMap" >
	select * from sys_user  where id in 
	 <foreach collection="list"  item="item" index="index" open="(" separator="," close=")">  
		 #{item}
	</foreach>
	</select>
-----------傳入一個(gè)map---------批量修改數(shù)據(jù)---------------

controller中:

Map<String, Object> map = new HashMap<>();
		map.put("notifyNum", notifyNum);
		map.put("userIdArr", userIdArr);
		userService.sendNotify(map);
		
sql中:

<!--發(fā)送通知,保存notifyNum 到user表中的notifyCodes中-->
<update id="sendNotify" parameterType="java.util.Map" >
	update user 
	set notify_codes=if(notify_codes is null or notify_codes='',#{notifyNum},CONCAT(notify_codes,',',#{notifyNum}))
	 where id in
        <foreach collection="userIdArr" index="index" item="item" open="(" separator="," close=")">
			  #{item}
       </foreach>
</update>		
		
總結(jié):
①這里傳入了一個(gè)String notifyNum和一個(gè)String[] userIdArr ,我們只要在sql中名稱(chēng)匹配就可以了。
②批量修改也可以用in 
③在修改的時(shí)候,我們可以在原來(lái)的字段值中直接后面追加字符串。當(dāng)原來(lái)的值為數(shù)字的時(shí)候,我們可以  update user set notify_codes=notify_codes+'2'  where id='24' 
這樣,假設(shè)原來(lái)為5,那么現(xiàn)在就為 7 了。
當(dāng)原來(lái)的值是一個(gè)String類(lèi)型時(shí),我們可以用 CONCAT(notify_codes,',',#{notifyNum}) 來(lái)在后面追加 。比如原來(lái)為  "12" 現(xiàn)在最加一個(gè)  ",13"  那么結(jié)果為  "12,13"   
④判斷一個(gè)字段是否為空的時(shí)候,用這樣用  if(notify_codes is null or notify_codes='','為空或空字符串返回這個(gè)值','非空的時(shí)候返回這個(gè)值')  		

第二種方式:整條語(yǔ)句循環(huán)  (自己未驗(yàn)證)

<update id="batchUpdate"  parameterType="java.util.List">  
        
          <foreach collection="list" item="item" index="index" open="" close="" separator=";">  
                update test   
                <set>  
                  test=${item.test}+1  
                </set>  
                where id = ${item.id}  
         </foreach>  
            
    </update>



sql中我們可以傳入一個(gè)list或者一個(gè)數(shù)組,返回一個(gè)list。

這里用到了sql中的 In,用到了sql中的遍歷。


在我們要向mapper.xml中傳遞String參數(shù)的時(shí)候,需要sql中設(shè)置

parameterType="String"

同時(shí) 要保證impl中的參數(shù)名和sql中的名字要一致。

如下:

@Override
	public User findByUE(String userId)throws Exception{
		return (User)dao.findForObject("UserMapper.findById",userId);
	}
	
	sql :
	u.id = #{userId}
















向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI