MyBatis傳入List集合查詢數(shù)據(jù)問題
MyBatis傳入List集合查詢數(shù)據(jù)
使用的是SSM框架,數(shù)據(jù)庫是MySQL,做查詢的時(shí)候傳入List集合,使用SQL語句的in方式查詢數(shù)據(jù)
主要有兩點(diǎn)問題
我的List集合是利用的另外一個(gè)語句查詢出來的,傳入?yún)?shù)是int類型,返回值是int類型的List集合:
List<Integer> select(Integer id);
<select id="select" resultType="java.util.List"
?? ?parameterType="java.lang.Integer">
?? ?select id
?? ?from section
?? ?where status='A'
?? ?and unit_id=#{id,jdbcType=INTEGER}
</select>這是我第一次的時(shí)候使用的返回值類型(java.util.List),這種情況下在我執(zhí)行的時(shí)候會報(bào)錯(cuò):java.lang.UnsupportedOperationException
其實(shí)這里如果我們是要返回指定類型的集合直接寫java.lang.Integer(int類型)java.lang.String(字符串)等等就可以了,當(dāng)然也可以自定義一個(gè)resultMap
<select id="select" resultType="java.lang.Integer"
?? ?parameterType="java.lang.Integer">
?? ?select id
?? ?from section
?? ?where status='A'
?? ?and unit_id=#{id,jdbcType=INTEGER}
</select>上面是通過一個(gè)id查詢出List集合,下面是將查到的這個(gè)List集合放入查詢條件中:
List<Test> selectById(List<Integer> id);
<select id="selectById" parameterType="java.util.List"
?? ?resultMap="BaseResultMap">
?? ?select * from test
?? ?where status = 'A'
?? ?and id in
?? ?<foreach collection="list" index="index" item="item" open="("
?? ??? ?separator="," close=")">
?? ??? ?#{item}
?? ?</foreach>
</select>上述的查詢語句可以整合在一個(gè)sql語句中,這里為了創(chuàng)造list數(shù)據(jù)所以分開了。
使用foreach 語句循環(huán)集合中的數(shù)據(jù),item就是循環(huán)到的數(shù)據(jù),如果你是一個(gè)復(fù)雜類型的數(shù)據(jù)做批量插入的話可以使用item.屬性名 的方式獲取對應(yīng)值,類似于java的foreach循環(huán)語句,某些時(shí)候可能傳入的是Array數(shù)組,畢竟都說Array比List效率高,這種時(shí)候和上述方法類似,也是foreach語句。具體的分析后續(xù)更新。
MyBatis傳入List集合批量刪除
Model
public class FastDFSModel {
? ? private String pathId;
? ? private String modelId;
? ? private String csvpath;
? ? private String resultpath;
? ? private String updatetime;
? ? }Dao
import org.apache.ibatis.annotations.Param;
?void deleteDateById(@Param("list") List<FastDFSModel> deleteList);mapper
其中parameterType寫為list
foreach 中的collection寫為"list"
item 為遍歷的每一項(xiàng),代表著model
在變量中用#{item.pathId}來獲取值
此業(yè)務(wù)為通過id進(jìn)行刪除
其中open="(" separator="," close=")"為拼接的in查詢,把id用逗號拼接起來
?<delete id="deleteDateById" parameterType="java.util.List">
? ? ? ? delete from T_FASTDFS_PATH t where t.path_id in
? ? ? ? <foreach item="item" collection="list" open="(" separator="," close=")">
? ? ? ? ? ? #{item.pathId,jdbcType=VARCHAR}
? ? ? ? </foreach>
? ? </delete>控制臺打印如下
delete from T_FASTDFS_PATH t where t.path_id in ( ? , ? , ? )
PreparedStatement - ==> Parameters: 2(String), 1(String), 3(String)
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
SpringBoot使用前綴樹過濾敏感詞的方法實(shí)例
Trie也叫做字典樹、前綴樹(Prefix Tree)、單詞查找樹,特點(diǎn):查找效率高,消耗內(nèi)存大,這篇文章主要給大家介紹了關(guān)于SpringBoot使用前綴樹過濾敏感詞的相關(guān)資料,需要的朋友可以參考下2022-01-01
Java利用for循環(huán)輸出空心菱形的實(shí)例代碼
這篇文章主要介紹了Java利用for循環(huán)輸出空心菱形的實(shí)例代碼,需要的朋友可以參考下2014-02-02
調(diào)用Process.waitfor導(dǎo)致的進(jìn)程掛起問題及解決
這篇文章主要介紹了調(diào)用Process.waitfor導(dǎo)致的進(jìn)程掛起問題及解決,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-12-12
SpringSecurity6.x多種登錄方式配置小結(jié)
SpringSecurity6.x變了很多寫法,本文就來介紹一下SpringSecurity6.x多種登錄方式配置小結(jié),具有一定的參考價(jià)值,感興趣的可以了解一下2023-12-12

