mybatis注解開發(fā)使用foreach方式
mybatis注解開發(fā)使用foreach
寫法看代碼
@Select( " <script>" + " select id, user_id userId, batch_number batchNumber, unit_name unitName, word_detail wordDetail,word, score, create_time createTime " + " from word_practice_records where user_id =#{userId} and batch_number=#{batchNumber} and unit_name=#{unitName} and word in "+ " <foreach collection='wordScoreViewList' open='(' item='wordScore' separator=',' close=')'> #{wordScore.word}</foreach> "+ " </script>" ) List<WordPracticeRecords> getLessThan40WordByWordList(@Param("userId") String userId, @Param( "batchNumber" )String batchNumber, @Param( "unitName" ) String unitName, @Param( "wordScoreViewList" ) List<WordScoreView> wordScoreViewList);
注意:
需要再前后增加<script></script> 標(biāo)簽
循環(huán)使用
<foreach collection='wordScoreViewList' open='(' item='wordScore' separator=',' close=')'> #{wordScore.word} </foreach>
mybatis中的foreach語句簡介
mybatis中的foreach語句適用于多種業(yè)務(wù)場景,主要起的作用是迭代集合。
在實(shí)際應(yīng)用場景中,使用一個(gè)正確的foreach能夠提高執(zhí)行效率,所以通過記錄最近一次使用foreach的具體場景來了解foreach的具體實(shí)現(xiàn)。
Mybatis的foreach語法
通過業(yè)務(wù)層傳入一個(gè)LIst集合,其中存放了一批id號,List list 隨后我要對此集合中的id取出依次遍歷,即寫法如下
select * from user where 1=1 <if test="id != null"> and id in <foreach item="item" index="index" collection="list" open="(" separator="," close=")"> '#{item}' </foreach> </if>
等同于以下的mysql寫法:
select * from user where id in (1,2,3,4,5)
其中需要注意的是collection參數(shù)后面的值要與變量名保持一致,我這里為list則需要保持一致,關(guān)于這幾個(gè)參數(shù)的詳解在文末會(huì)有介紹。
進(jìn)階寫法
假如我傳過來的是一個(gè)以,為分隔符的連貫字符串,例如某個(gè)對象中有一個(gè)屬性String extInfo = “1,2,3,4,5”,依然跟上述的業(yè)務(wù)場景一致,那我們就需要先將該字符串做處理之后再進(jìn)行foreach迭代
select * from user where 1=1 <if test="extInfo != null"> and id in <foreach item="item" index="index" collection="extInfo.split(',')" open="(" separator="," close=")"> '#{item}' </foreach> </if>
還有一種業(yè)務(wù)場景是針對Map的迭代,例如有一個(gè)key-value對應(yīng)的是ids-List,我們也能通過foreach迭代該map下的ids鍵來實(shí)現(xiàn)
select * from user where 1=1 <if test="extInfo != null"> and id in <foreach item="item" index="index" collection="ids" open="(" separator="," close=")"> '#{item}' </foreach> </if>
原理
上述的foreach應(yīng)用場景主要解決了使用in語句迭代批量查詢,迭代刪除以及迭代編輯等批量操作,那其中的參數(shù)具體是什么意思呢。
item
表示集合中每一個(gè)元素進(jìn)行迭代時(shí)的別名index
表示索引collection
表示要迭代的集合open
表示前綴的拼接內(nèi)容separator
表示迭代集合close
表示后綴的拼接內(nèi)容
基本語法就包括了上述的6個(gè)參數(shù),各個(gè)參數(shù)都代表著各自的含義,在實(shí)際應(yīng)用中使用foreach迭代能夠幫助我們完成各類批量操作。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
在IntelliJ IDEA中使用gulp的方法步驟(圖文)
這篇文章主要介紹了在IntelliJ IDEA中使用gulp的方法步驟(圖文),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2019-01-01SpringBoot中定制異常頁面的實(shí)現(xiàn)方法
這篇文章主要介紹了SpringBoot中定制異常頁面的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09Java的Flowable工作流之加簽轉(zhuǎn)簽詳解
這篇文章主要介紹了Java的Flowable工作流之加簽轉(zhuǎn)簽詳解,Flowable是一個(gè)開源的工作流引擎,它提供了一套強(qiáng)大的工具和功能,用于設(shè)計(jì)、執(zhí)行和管理各種類型的工作流程,需要的朋友可以參考下2023-11-11java中生成任意之間數(shù)的隨機(jī)數(shù)詳解
這篇文章主要介紹了java中生成任意之間數(shù)的隨機(jī)數(shù)詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-09-09java數(shù)據(jù)庫數(shù)據(jù)分批讀取的實(shí)現(xiàn)示例
在處理大量數(shù)據(jù)時(shí),直接從數(shù)據(jù)庫一次性讀取所有數(shù)據(jù)可能會(huì)導(dǎo)致內(nèi)存溢出或者性能下降,本文就來介紹一下java數(shù)據(jù)庫數(shù)據(jù)分批讀取的實(shí)現(xiàn)示例,感興趣的可以了解一下2024-01-01