mybatis接收以逗號分隔的字符串批量查詢方式
接收以逗號分隔的字符串批量查詢
<IF test = " supplierIds !=null and supplierIds.indexOf(',') != -1 ?">?
? ? AND msd.supplier_id NOT IN?
? ? <foreach collection = "supplierIds.split(',')" item = "item"?
? ? ? ? OPEN = "(" SEPARATOR = "," CLOSE = ")"> ?
? ? ? ? ? ? #{item}
? ? </foreach>
</IF>
<IF test = "supplierIds !=null and supplierIds.indexOf(',') == -1">?
? ? AND msd.supplier_id != #{supplierIds}
</IF>直接粘貼進(jìn)去,上面部分實(shí)現(xiàn)循環(huán)查詢,下面是針對單個(gè)字符的補(bǔ)充(因?yàn)閱蝹€(gè)字符不存在逗號)
如何相互轉(zhuǎn)換逗號分隔的字符串和List
如果程序員想實(shí)現(xiàn)某種功能,有兩條路可以走。一條就是自己實(shí)現(xiàn),一條就是調(diào)用別人的實(shí)現(xiàn),別人的實(shí)現(xiàn)就是所謂的API。而且大多數(shù)情況下,好多“別人”都 實(shí)現(xiàn)了這個(gè)功能。程序員有不得不在這其中選擇。大部分情況下,程序員就會(huì)知道哪個(gè)用哪個(gè),先看到哪個(gè)用哪個(gè)。到最后,在實(shí)際項(xiàng)目中,同樣的功能會(huì)調(diào)用五花 八門的API。我在公司的項(xiàng)目中就看到了這種情況。其實(shí),也無可厚非,我相信好多項(xiàng)目都是這個(gè)樣子。我們不可能要求程序員都用同一種方法。程序員可能會(huì)有 不同的好惡。為了讓程序員能快樂自由地編程,就隨他去吧!因?yàn)槌绦騿T感覺自由的時(shí)候,感覺快樂的時(shí)候,正是他們生產(chǎn)力最高的時(shí)候。
不扯淡了?;貧w正題,到底這些不同的實(shí)現(xiàn)方法或者API真的就沒有高低貴賤之分?以我遇到這個(gè)逗號分隔字符串轉(zhuǎn)List為例,探討探討:
注:下面的代碼并不能保證能運(yùn)行,可能需要稍微的修改。
將逗號分隔的字符串轉(zhuǎn)換為List
方法 1: 利用JDK的Arrays類
String str = "a,b,c";
List<String> result = Arrays.asList(str.split(","));方法2:利用Guava的Splitter
? ? String str = "a, b, c";
? ? List<String> result = Splitter.on(",").trimResults().splitToList(str);方法3:利用Apache Commons的StringUtils (只是用了split)
? String str = "a,b,c"; ? ? List<String> result = Arrays.asList(StringUtils.split(str,","));
方法4:利用Spring Framework的StringUtils
? ? String str = "a,b,c"; ? ? List<String> str = Arrays.asList(StringUtils.commaDelimitedListToStringArray(str));
將List轉(zhuǎn)換為逗號分隔符
方法 1:利用JDK(好像沒有很好的方法,需要一步一步實(shí)現(xiàn))
NA
方法2:利用Guava的Joiner
? ? List<String> list = new ArrayList<String>();
? ? list.add("a");
? ? list.add("b");
? ? list.add("c");
? ? String str = Joiner.on(",").join(list);方法3:利用Apache Commons的StringUtils
? ? List<String> list = new ArrayList<String>();
? ? list.add("a");
? ? list.add("b");
? ? list.add("c");
? ? String str = StringUtils.join(list.toArray(), ",");方法4:利用Spring Framework的StringUtils
List<String> list = new ArrayList<String>();
list.add("a");
list.add("b");
list.add("c");
String str = StringUtils.collectionToDelimitedString(list, ",");比較下來,我的觀點(diǎn)就是Guava庫更靈活,適用面更廣。項(xiàng)目中如果沒有引入Guava的話,那就加上它。
? //拼接所有字符串
? ? public String getAllIdByUserMobile( List<String> userMobile) throws Exception {
? ? ? ? ? ?StringBuilder userMobileIdString = new StringBuilder();
? ? ? ? ? ?//拼接字符串 userMobile productId
? ? ? ? ? ? if( userMobile.size() <= 0){
? ? ? ? ? ? ? ? return "";
? ? ? ? ? ? }else{
? ? ? ? ? ? ? ? for(String item:userMobile){
? ? ? ? ? ? ? ? ? ? userMobileIdString.append(item + ",");
? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? return org.apache.commons.lang.StringUtils.removeEnd(userMobileIdString.toString(), ",");
? ? ? ? ? ? }
? ? }以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Spring Security 自定義資源服務(wù)器實(shí)踐過程
這篇文章主要介紹了Spring Security 自定義資源服務(wù)器實(shí)踐,我們通過自己搭建的授權(quán)服務(wù)器和資源服務(wù)器,完整體驗(yàn)了OAuth2流程,需要的朋友可以參考下2022-08-08
Spring Boot Security 結(jié)合 JWT 實(shí)現(xiàn)無狀態(tài)的分布式API接口
JSON Web Token(縮寫 JWT)是目前最流行的跨域認(rèn)證解決方案。這篇文章主要介紹了Spring Boot Security 結(jié)合 JWT 實(shí)現(xiàn)無狀態(tài)的分布式API接口 ,需要的朋友可以參考下2019-04-04
MyBatis結(jié)果映射(ResultMap)的使用
在MyBatis中,結(jié)果映射是實(shí)現(xiàn)數(shù)據(jù)庫結(jié)果集到Java對象映射的核心,它不僅支持簡單的字段映射,還能處理字段名不一致、嵌套對象和集合映射等復(fù)雜場景,通過ResultMap,開發(fā)者可以靈活定義映射關(guān)系,以適應(yīng)各種需求,感興趣的可以了解一下2024-09-09
Springboot根據(jù)配置文件動(dòng)態(tài)注入接口實(shí)現(xiàn)類詳解
這篇文章主要介紹了Springboot根據(jù)配置文件動(dòng)態(tài)注入接口實(shí)現(xiàn)類詳解,具有很好的參考價(jià)值,希望對大家有所幫助,需要的朋友可以參考下,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-10-10
String.intern()作用與常量池關(guān)系示例解析
這篇文章主要為大家介紹了String.intern()作用與常量池關(guān)系示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08

