mybatis中關於傳入參數parameterType

衆所周知,mybatis的傳入參數能夠是各類Java的基本類型,Date啊,Java Bean啊,可是若是想傳入一個collection怎麼辦呢?數組

經查找後發現能夠使用mapper配置文件中的foreach語句,借用別人寫的文章:mybatis

3.7 foreachapp

對於動態SQL 很是必須的,主是要迭代一個集合,一般是用於IN 條件。List 實例將使用「list」作爲鍵,數組實例以「array」 作爲鍵。測試

foreach元素是很是強大的,它容許你指定一個集合,聲明集合項和索引變量,它們能夠用在元素體內。它也容許你指定開放和關閉的字符串,在迭代之間放置分隔符。這個元素是很智能的,它不會偶然地附加多餘的分隔符。this

注意:你能夠傳遞一個List實例或者數組做爲參數對象傳給MyBatis。當你這麼作的時候,MyBatis會自動將它包裝在一個Map中,用名稱在做爲鍵。List實例將會以「list」做爲鍵,而數組實例將會以「array」做爲鍵。.net

這個部分是對關於XML配置文件和XML映射文件的而討論的。下一部分將詳細討論Java API,因此你能夠獲得你已經建立的最有效的映射。對象

3.7.1參數爲array示例的寫法略3.7.2參數爲list示例的寫法blog

接口的方法聲明:索引

Java代碼 接口

  1. public List<StudentEntity> getStudentListByClassIds_foreach_list(List<String> classIdList);

動態SQL語句:

Xml代碼

  1. <!-- 7.2 foreach(循環List<String>參數) - 做爲where中in的條件 -->

  2. <select id="getStudentListByClassIds_foreach_list" resultMap="resultMap_studentEntity">

  3. SELECT ST.STUDENT_ID,

  4. ST.STUDENT_NAME,

  5. ST.STUDENT_SEX,

  6. ST.STUDENT_BIRTHDAY,

  7. ST.STUDENT_PHOTO,

  8. ST.CLASS_ID,

  9. ST.PLACE_ID

  10. FROM STUDENT_TBL ST

  11. WHERE ST.CLASS_ID IN

  12. <foreach collection="list" item="classIdList"  open="(" separator="," close=")">

  13. #{classIdList}

  14. </foreach>

  15. </select>

測試代碼,查詢學生中,在2000000一、20000002這兩個班級的學生:

Java代碼

  1. @Test

  2. public void test7_2_foreach() {

  3. ArrayList<String> classIdList = new ArrayList<String>();

  4. classIdList.add("20000001");

  5. classIdList.add("20000002");

  6. List<StudentEntity> list = this.dynamicSqlMapper.getStudentListByClassIds_foreach_list(classIdList);

  7. for (StudentEntity e : list) {

  8. System.out.println(e.toString());

  9. }

  10. }

這個是ItEye上的一篇文章,其中配置文件中的parameterType是能夠不配置的,mybatis會自動傳入的。當您想傳入collection時,並不能直接傳入collection對象,要將其先轉換爲list,而後才能傳入。由於mybatis生成SQL語句遍歷list時是須要用到get()方法的,而這個方法只在List中才有,Collection裏是沒有的。以上的配置在Mybitis官方文檔中的「動態SQL」也能夠找到。

這裏推薦一下這個博主關於Mybitis的文章,寫得很不錯。

相關文章
相關標籤/搜索