mybatis中关于传入参数parameterType
2014-01-23 00:00
399 查看
众所周知,mybatis的传入参数可以是各种Java的基本类型,Date啊,Java Bean啊,但是如果想传入一个collection怎么办呢?
经查找后发现可以使用mapper配置文件中的foreach语句,借用别人写的文章:
3.7 foreach
对于动态SQL 非常必须的,主是要迭代一个集合,通常是用于IN 条件。List 实例将使用“list”做为键,数组实例以“array” 做为键。
foreach元素是非常强大的,它允许你指定一个集合,声明集合项和索引变量,它们可以用在元素体内。它也允许你指定开放和关闭的字符串,在迭代之间放置分隔符。这个元素是很智能的,它不会偶然地附加多余的分隔符。
注意:你可以传递一个List实例或者数组作为参数对象传给MyBatis。当你这么做的时候,MyBatis会自动将它包装在一个Map中,用名称在作为键。List实例将会以“list”作为键,而数组实例将会以“array”作为键。
这个部分是对关于XML配置文件和XML映射文件的而讨论的。下一部分将详细讨论Java API,所以你可以得到你已经创建的最有效的映射。
3.7.1参数为array示例的写法略3.7.2参数为list示例的写法
接口的方法声明:
Java代码
public List<StudentEntity> getStudentListByClassIds_foreach_list(List<String> classIdList);
动态SQL语句:
Xml代码
<!-- 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这两个班级的学生:
Java代码
@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());
}
}
这个是ItEye上的一篇文章,其中配置文件中的parameterType是可以不配置的,mybatis会自动传入的。当您想传入collection时,并不能直接传入collection对象,要将其先转换为list,然后才能传入。因为mybatis生成SQL语句遍历list时是需要用到get()方法的,而这个方法只在List中才有,Collection里是没有的。以上的配置在Mybitis官方文档中的“动态SQL”也可以找到。
这里推荐一下这个博主关于Mybitis的文章,写得很不错。
经查找后发现可以使用mapper配置文件中的foreach语句,借用别人写的文章:
3.7 foreach
对于动态SQL 非常必须的,主是要迭代一个集合,通常是用于IN 条件。List 实例将使用“list”做为键,数组实例以“array” 做为键。
foreach元素是非常强大的,它允许你指定一个集合,声明集合项和索引变量,它们可以用在元素体内。它也允许你指定开放和关闭的字符串,在迭代之间放置分隔符。这个元素是很智能的,它不会偶然地附加多余的分隔符。
注意:你可以传递一个List实例或者数组作为参数对象传给MyBatis。当你这么做的时候,MyBatis会自动将它包装在一个Map中,用名称在作为键。List实例将会以“list”作为键,而数组实例将会以“array”作为键。
这个部分是对关于XML配置文件和XML映射文件的而讨论的。下一部分将详细讨论Java API,所以你可以得到你已经创建的最有效的映射。
3.7.1参数为array示例的写法略3.7.2参数为list示例的写法
接口的方法声明:
Java代码
public List<StudentEntity> getStudentListByClassIds_foreach_list(List<String> classIdList);
动态SQL语句:
Xml代码
<!-- 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这两个班级的学生:
Java代码
@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());
}
}
这个是ItEye上的一篇文章,其中配置文件中的parameterType是可以不配置的,mybatis会自动传入的。当您想传入collection时,并不能直接传入collection对象,要将其先转换为list,然后才能传入。因为mybatis生成SQL语句遍历list时是需要用到get()方法的,而这个方法只在List中才有,Collection里是没有的。以上的配置在Mybitis官方文档中的“动态SQL”也可以找到。
这里推荐一下这个博主关于Mybitis的文章,写得很不错。
相关文章推荐
- mybatis中关于传入参数parameterType
- mybatis中关于传入参数parameterType
- 【转载】mybatis中关于传入参数parameterType
- mybatis中关于传入参数parameterType
- mybatis中关于传入参数parameterType
- MyBatis传入参数与parameterType
- MyBatis之传入参数parameterType
- MyBatis传入参数与parameterType
- MyBatis之传入参数parameterType
- MyBatis之传入参数——parameterType(转)
- MyBatis传入参数与parameterType
- MyBatis传入参数与parameterType
- 关于Mybatis中mapper.xml的传入参数简单技巧
- MyBatis传入参数与parameterType
- MyBatis传入参数与parameterType
- 问题描述: 在使用mybatis对数据库执行更新操作时,parameterType为某个具体的bean,而bean中传入的参数为null时,抛出异常如下:
- MyBatis传入参数与parameterType
- MyBatis传入参数与parameterType
- MyBatis之传入参数——parameterType(转)
- Mybatis之传入参数parameterType