【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对象的长度。

【总结】

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

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 15
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mandy_i

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值