mybatis傳入多個數組或多個list
此博客給出了mybatis傳入多個數組或者多個List,傳入多個數組或者多個List,傳入多個數組或者多個List,而非傳入多個參數的一種實現。(PS:傳入多個參數很簡單,直接去搜會有大量相關博客)
這幾天實現一個小功能,需要在查詢數據庫時用到兩次IN查詢,發現直接使用兩個list會報錯,去搜集了相關資料終於解決了,在此記錄一下,以免下次碰到類似問題手足無措。
直接貼需求代碼:
dao:
需要實現的是這樣子的接口:
public List<ExamIdAndSubjectId>getIds(@Param("examIds")List<String> examIds,@Param("subjectIds")List<String>subjectIds);
然而實際是這樣實現的:
public List<ExamIdAndSubjectId>getIds(@Param("ids")Ids ids);
POJO類Ids的內容如下(省略get,set,toString方法):
public class Ids {
List<String>examIds;
List<String>subjectIds;
..............
}
mapper:
<select id="getIds" resultType="cn.siti.domain.ExamIdAndSubjectId">
SELECT DISTINCT EB_ID AS examId,SUB_CODE AS subjectId
FROM eqe_exam_paper_new
WHERE EB_ID IN
<foreach item="item" collection="ids.examIds" index="idx" open="(" separator="," close=")">
#{item}
</foreach>
AND SUB_CODE IN
<foreach item="items" collection="ids.subjectIds" index="idx" open="(" separator="," close=")">
#{items}
</foreach>
</select>
簡單來講,在傳入多個list時,最好將多個List封裝在一個pojo類里面,然后將這個pojo類作為接口的參數傳過來,在mapper里面用到list時,用pojo.list方式去取list參數。數組同理。
至於為什么需要將多個List參數封裝,可以參考mybatis jar包里的源碼實現(binding文件夾下的MapperMethod.class)。
已經有人分析過此源碼,在此不再套用別人的成果。附上傳送門http://www.zhongruitech.com/528480084.html
https://blog.csdn.net/zh15732621679/article/details/79678363
————————————————
版權聲明:本文為CSDN博主「絕命響應」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/qq_39762130/article/details/89670000