转载自:
http://limingnihao.iteye.com/blog/782190
foreach
对于动态SQL 非常必须的,主是要迭代一个集合,通常是用于IN 条件。List 实例将使用“list”做为键,数组实例以“array” 做为键。
foreach元素是非常强大的,它允许你指定一个集合,声明集合项和索引变量,它们可以用在元素体内。它也允许你指定开放和关闭的字符串,在迭代之间放置分隔符。这个元素是很智能的,它不会偶然地附加多余的分隔符。
注意:你可以传递一个List实例或者数组作为参数对象传给MyBatis。当你这么做的时候,MyBatis会自动将它包装在一个Map中,用名称在作为键。List实例将会以“list”作为键,而数组实例将会以“array”作为键。
这个部分是对关于XML配置文件和XML映射文件的而讨论的。下一部分将详细讨论Java API,所以你可以得到你已经创建的最有效的映射。
3.7.1参数为array示例的写法
接口的方法声明:
动态SQL语句:
- <!— 7.1 foreach(循环array参数) - 作为where中in的条件 -->
- <select id="getStudentListByClassIds_foreach_array" resultMap="resultMap_studentEntity">
- SELECT ST.STUDENT_ID,
- ST.STUDENT_NAME,
- ST.STUDENT_SEX,
- ST.STUDENT_BIRTHDAY,
- ST.STUDENT_PHOTO,
- ST.CLASS_ID,
- ST.PLACE_ID
- FROM STUDENT_TBL ST
- WHERE ST.CLASS_ID IN
- <foreach collection="array" item="classIds" open="(" separator="," close=")">
- #{classIds}
- </foreach>
- </select>
测试代码,查询学生中,在20000001、20000002这两个班级的学生:
- @Test
- public void test7_foreach() {
- String[] classIds = { "20000001", "20000002" };
- List<StudentEntity> list = this.dynamicSqlMapper.getStudentListByClassIds_foreach_array(classIds);
- for (StudentEntity e : list) {
- System.out.println(e.toString());
- }
- <p>}<span style="font-size: 14px; font-weight: bold; white-space: normal;"> </span></p>
3.7.2参数为list示例的写法
接口的方法声明:
动态SQL语句:
- <!-- 7.2 foreach(循环List<String>参数) - 作为where中in的条件 -->
- <select id="getStudentListByClassIds_foreach_list" resultMap="resultMap_studentEntity">
- SELECT ST.STUDENT_ID,
- ST.STUDENT_NAME,
- ST.STUDENT_SEX,
- ST.STUDENT_BIRTHDAY,
- ST.STUDENT_PHOTO,
- ST.CLASS_ID,
- ST.PLACE_ID
- FROM STUDENT_TBL ST
- WHERE ST.CLASS_ID IN
- <foreach collection="list" item="classIdList" open="(" separator="," close=")">
- #{classIdList}
- </foreach>
- </select>
测试代码,查询学生中,在20000001、20000002这两个班级的学生:
- @Test
- public void test7_2_foreach() {
- ArrayList<String> classIdList = new ArrayList<String>();
- classIdList.add("20000001");
- classIdList.add("20000002");
- List<StudentEntity> list = this.dynamicSqlMapper.getStudentListByClassIds_foreach_list(classIdList);
- for (StudentEntity e : list) {
- System.out.println(e.toString());
- }
- }