最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

mybatis?foreach?list特殊處理方式

 更新時間:2022年03月23日 08:45:09   作者:51xplan  
這篇文章主要介紹了mybatis?foreach?list特殊處理方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

foreach list特殊處理

最近做一個功能,sql要用到 IN 條件,通過list傳入IN 的值,如:

SELECT * FROM table1 WHERE id in (1,2,3)

對應(yīng)的mybatis寫法為:

? ? <select id="queryByIds" resultMap="resultMap" parameterType="list">
? ? ? ? SELECT * FROM table1
? ? ? ? WHERE id
? ? ? ? <foreach collection="list" item="rid" open="in(" separator="," close=")">
? ? ? ? ? ? #{rid}
? ? ? ? </foreach>
? ? </select>

期望結(jié)果是按list的值進行查詢。

可是,當(dāng)list為空的時候呢?

sql應(yīng)該是這樣的SELECT * FROM table1 WHERE id in ()。直接在mysql中運行肯定是語法錯誤的。

無論如何是不會查到數(shù)據(jù)的,但mybatis又是什么策略呢?直接把這一條where條件給我忽略了…導(dǎo)致查全表數(shù)據(jù)。

這也不好說mybatis做的好不好,算不算bug了。

既然知道套路了,就得有策略來應(yīng)對了。于是多寫了兩個if。

? ? <select id="queryByIds" resultMap="resultMap" parameterType="list">
? ? ? ? SELECT * FROM table1
? ? ? ? WHERE id
? ? ? ? <if test="list != null and list.size() > 0">
? ? ? ? ? ? <foreach collection="list" item="rid" open="in(" separator="," close=")">
? ? ? ? ? ? ? ? #{rid}
? ? ? ? ? ? </foreach>
? ? ? ? </if>
? ? ? ? <if test="list == null or list.size() == 0">
? ? ? ? ? ? = -1
? ? ? ? </if>
? ? </select>

不算是這么上策,但也能解決問題,當(dāng)list為空時,給id賦值一個-1,保證查不到數(shù)據(jù),sql也沒有語法錯誤。 

foreach用法 List和Array,對象

向sql傳遞數(shù)組或List,mybatis使用foreach解析

foreach元素的屬性主要有item,index,collection,open,separator,close。

  • item:集合中元素迭代時的別名,該參數(shù)為必選。
  • index:在list和數(shù)組中,index是元素的序號,在map中,index是元素的key,該參數(shù)可選
  • open:foreach代碼的開始符號,一般是(和close=")"合用。常用在in(),values()時。該參數(shù)可選
  • separator:元素之間的分隔符,例如在in()的時候,separator=","會自動在元素中間用“,“隔開,避免手動輸入逗號導(dǎo)致sql錯誤,如in(1,2,)這樣。該參數(shù)可選。
  • close:foreach代碼的關(guān)閉符號,一般是)和open="("合用。常用在in(),values()時。該參數(shù)可選。

collection:foreach的時候最關(guān)鍵的也是最容易出錯的就是collection屬性,該屬性是必須指定的,但是在不同情況 下,該屬性的值是不一樣的

主要有一下3種情況:

1. 如果傳入的是單參數(shù)且參數(shù)類型是一個List的時候,collection屬性值為list

2. 如果傳入的是單參數(shù)且參數(shù)類型是一個array數(shù)組的時候,collection的屬性值為array

3. 如果使用Map封裝了,collection的屬性值為對應(yīng)的Key

1、array數(shù)組的類型

UserMapper.java

List<User> findUser_array(int [] ids)throws Exception;

UserMapper.xml

<!--單參數(shù)array數(shù)組的類型-->?
? <select id="findUser_array" resultType="com.xiaomin.page.pojo.User">?
? ? select * from sys_user?
? ? ? ? <where>?
? ? ? ? ? ? <foreach collection="array" item="item" open="and id in(" separator="," close=")">?
? ? ? ? ? ? ? ? ?#{item}?
? ? ? ? ? ? </foreach>?
? ? ? ? </where>?
? </select>

Controller.java

@RequestMapping("/findUser_array")?
? @ResponseBody?
? public List<User> foreach_test()throws Exception{?
? ? int [] ids=new int[]{1,2,3};?
? ? List<User> list = userMapper.findUser_array(ids);?
? ? return list;?
}

示例:

2、list的類型

UserMapper.java

List<User> findUser_list(List<Integer>list)throws Exception;

UserMapper.xml

<!--list類型-->?
? ? <select id="findUser_list" resultType="com.xiaomin.page.pojo.User">?
? ? select * from sys_user?
? ? <where>?
? ? ? ? <foreach collection="list" item="user_id" open="and id in(" separator="," close=")">?
? ? ? ? ? ? #{user_id}?
? ? ? ? </foreach>?
? ? </where>?
? </select>

Controller.java

/**
?* list類型
?* @return
?* @throws Exception
?*/?
? @RequestMapping("/findUser_list")?
? @ResponseBody?
? public List<User> findUser_list()throws Exception{?
? ? List<User> list = userMapper.findUser_list(Arrays.asList(new Integer[]{1,2,3,6}));?
? ? return list;?
}

測試截圖: 

3、對象類型

UserMapper.java

List<User> findUser_obj(UserQueryVo vo)throws Exception;

UserMapper.xml

<!--對象類型-->?
? <select id="findUser_obj" parameterType="com.xiaomin.page.pojo.vo.UserQueryVo" resultType="com.xiaomin.page.pojo.User">?
? ? select * from sys_user?
? ? ? ? <where>?
? ? ? ? ? ? <if test="ids !=null">?
? ? ? ? ? ? ? ? <foreach collection="ids" item="user_id" open="and id in (" separator="," close=")">?
? ? ? ? ? ? ? ? ? ? #{user_id}?
? ? ? ? ? ? ? ? </foreach>?
? ? ? ? ? ? </if>?
? ? ? ? </where>?
? </select>

Controller.java

/**
?* 對象類型
?* @return
?* @throws Exception
?*/?
? @RequestMapping("/findUser_obj")?
? @ResponseBody?
? public List<User> findUser_obj()throws Exception{
?
? ? List<Integer> ids = new ArrayList<>();?
? ? ids.add(1);?
? ? ids.add(2);?
? ? ids.add(3);
?
? ? UserQueryVo queryVo = new UserQueryVo();?
? ? queryVo.setIds(ids);?
? ? List<User> list = userMapper.findUser_obj(null);?
? ? return list;?
}

測試截圖:

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • mybaties plus實體類設(shè)置typeHandler不生效的解決

    mybaties plus實體類設(shè)置typeHandler不生效的解決

    這篇文章主要介紹了mybaties plus實體類設(shè)置typeHandler不生效的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • Android 屏幕分辨率的整理

    Android 屏幕分辨率的整理

    這篇文章主要介紹了Android 屏幕分辨率的整理的相關(guān)資料,這里整理了常見的分辨率希望能幫助到大家,需要的朋友可以參考下
    2017-08-08
  • java8 實現(xiàn)提取集合對象的每個屬性

    java8 實現(xiàn)提取集合對象的每個屬性

    這篇文章主要介紹了java8 實現(xiàn)提取集合對象的每個屬性方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • 小議Java中final關(guān)鍵字使用時的注意點

    小議Java中final關(guān)鍵字使用時的注意點

    final關(guān)鍵字代表著最后、不可改變,無論是在用final修飾類、修飾方法還是修飾變量時,都要注意內(nèi)存分配的問題.這里來小議Java中final關(guān)鍵字使用時的注意點:
    2016-06-06
  • 深入解析Spring中的@Bean注解

    深入解析Spring中的@Bean注解

    這篇文章主要介紹了深入解析Spring中的@Bean注解,Spring的@Bean注解用于告訴方法,產(chǎn)生一個Bean對象,然后這個Bean對象交給Spring管理,產(chǎn)生這個Bean對象的方法Spring只會調(diào)用一次,隨后這個Spring將會將這個Bean對象放在自己的IOC容器中,需要的朋友可以參考下
    2023-07-07
  • 在IDEA中使用debug工具去運行java程序的實現(xiàn)步驟

    在IDEA中使用debug工具去運行java程序的實現(xiàn)步驟

    調(diào)試工具(debug工具)是一種用于幫助程序員識別和修復(fù)程序中的錯誤的工具,它們提供了一系列的功能,幫助程序員在代碼執(zhí)行的過程中跟蹤和檢測問題,本文將給大家介紹使用debug工具去運行java程序的實現(xiàn)步驟,需要的朋友可以參考下
    2024-04-04
  • Springboot常用注解及配置文件加載順序詳解

    Springboot常用注解及配置文件加載順序詳解

    這篇文章主要介紹了Springboot常用注解及配置文件加載順序,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-11-11
  • vue+springboot項目上傳部署tomcat的方法實現(xiàn)

    vue+springboot項目上傳部署tomcat的方法實現(xiàn)

    本文主要介紹了vue+springboot項目上傳部署tomcat的方法實現(xiàn),包括環(huán)境準(zhǔn)備、配置調(diào)整以及部署步驟,文中通過圖文及示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-01-01
  • Java使用openssl檢測網(wǎng)站是否支持ocsp

    Java使用openssl檢測網(wǎng)站是否支持ocsp

    OCSP在線證書狀態(tài)協(xié)議是為了替換CRL而提出來的。對于現(xiàn)代web服務(wù)器來說一般都是支持OCSP的,OCSP也是現(xiàn)代web服務(wù)器的標(biāo)配,這篇文章主要介紹了Java使用openssl檢測網(wǎng)站是否支持ocsp,需要的朋友可以參考下
    2022-07-07
  • SpringCloud?@RefreshScope刷新機制淺析

    SpringCloud?@RefreshScope刷新機制淺析

    RefeshScope這個注解想必大家都用過,在微服務(wù)配置中心的場景下經(jīng)常出現(xiàn),他可以用來刷新Bean中的屬性配置,那大家對他的實現(xiàn)原理了解嗎?它為什么可以做到動態(tài)刷新呢
    2023-03-03

最新評論

旌德县| 崇义县| 淮北市| 图木舒克市| 泰州市| 全椒县| 临沧市| 红原县| 龙州县| 麦盖提县| 青河县| 红河县| 绥阳县| 汕头市| 通城县| 宣城市| 手游| 汉沽区| 佛学| 洛扎县| 松滋市| 阿尔山市| 泽州县| 马关县| 明水县| 花莲市| 温泉县| 平度市| 盐山县| 吴旗县| 抚顺县| 永寿县| 乐亭县| 阳信县| 汽车| 随州市| 吴旗县| 房山区| 福清市| 石门县| 红河县|