MyBatis中可以通過兩種方式傳遞子查詢的參數:
#{}
)方式傳遞參數:可以在子查詢中使用#{}
來表示參數,然后在父查詢中通過parameterType
指定參數類型,并在傳遞參數時將參數傳遞給父查詢。例如:<select id="getParentsByChildId" parameterType="java.lang.Integer" resultType="Parent">
SELECT * FROM parent WHERE id IN (
SELECT parent_id FROM child WHERE id = #{childId}
)
</select>
然后在調用該子查詢時,傳遞childId
參數:
List<Parent> parents = sqlSession.selectList("getParentsByChildId", childId);
<foreach>
標簽進行參數傳遞:可以在父查詢中使用<foreach>
標簽來遍歷參數列表,并將參數傳遞給子查詢。例如:<select id="getParentsByChildIds" parameterType="java.util.List" resultType="Parent">
SELECT * FROM parent WHERE id IN (
<foreach collection="childIds" item="childId" separator=",">
SELECT parent_id FROM child WHERE id = #{childId}
</foreach>
)
</select>
然后在調用該子查詢時,傳遞childIds
參數:
List<Integer> childIds = new ArrayList<>();
childIds.add(1);
childIds.add(2);
List<Parent> parents = sqlSession.selectList("getParentsByChildIds", childIds);
這樣就可以將childIds
中的值傳遞給子查詢,并返回滿足條件的父記錄列表。