0
点赞
收藏
分享

微信扫一扫

【Mybatis】——foreach使用方式


    最近参加了一个SSM的项目,在项目中经常需要循环遍历集合,而mybatis也能很好的支持数组和List,Set接口的集合,对此提供遍历集合。本文主要是对foreach元素使用的详细说明,希望能对大家有所帮助。

业务情景

    在查询一个学生的相关信息,但是学生的学号来源于一个List集合,具体选择哪个学生信息显示还是需要list集合来确定

先看mybatis中方法

<select id="queryAllStudentTotalScore" resultType="com.dmsdbj.itoo.examinationEvaluation.entity.StudentScoreEntity">
SELECT * FROM
v_countstudentscore v
INNER JOIN t_paper_record pr ON pr.paper_id = v.tTemplatePaperId
WHERE
(v.studentId IN
<foreach item = "studentId" index="index" collection = "studentIds"
open = "(" separator= "," close=")" >#{studentId}
</foreach>
AND v.tTemplatePaperId = #{paperId}
AND v.examTypeId = #{paperTypeId}
AND pr.mark_status = '0')
</select>


再看Dao的写法

/**
* 根据paperid查询没有判分的所有学生(不区分上课班)-贾文静-2017年8月30日09:07:35
* @param paperId 试卷id
* @param studentIds 学生id集合
* @param paperTypeId 考试类型id
* @return
*/
List<StudentScoreEntity> queryAllStudentTotalScore(@Param("paperId")String paperId, @Param("studentIds")List<String> studentIds, @Param("paperTypeId") String paperTypeId);


foreach参数解释

item:配置的是循环中当前的元素

index:当前元素在集合中索引值

collection:Dao层配置传入的集合名称,在dao中传递的是studentIds,所以collection=“studentIds”

open和close:配置的是以什么符合将这些集合元素包装起来

separator:各个元素的间隔符

最后那个#{studentId}其实在dao没有传入值,#{studentId}是当前正在匹配的元素的值,与item使用的元素为同一个值

说明

    在sql中使用in常常使用,但是大数据的in语句需要特别注意,in对消耗大量的性能,尤其是互联网项目,性能特别宝贵,还有一些数据库的SQL对执行长度也有限制,所以在使用的时候要预估一下这个collection对象的长度。

【总结】

    这是小白成长的道路,慢慢摸索中!

举报

相关推荐

0 条评论