mybatis注解开发使用foreach方式

 更新时间:2024年08月20日 09:07:09   作者:寻梦太极  
这篇文章主要介绍了mybatis注解开发使用foreach方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

mybatis注解开发使用foreach

写法看代码

    @Select( " <script>" +
            " select id, user_id userId, batch_number batchNumber, unit_name unitName, word_detail wordDetail,word, score, create_time createTime " +
            " from word_practice_records where user_id =#{userId} and batch_number=#{batchNumber} and unit_name=#{unitName} and  word  in "+
            " <foreach collection='wordScoreViewList' open='(' item='wordScore' separator=',' close=')'> #{wordScore.word}</foreach> "+
            " </script>" )
    List<WordPracticeRecords> getLessThan40WordByWordList(@Param("userId") String userId, @Param( "batchNumber" )String batchNumber,
                                                          @Param( "unitName" ) String unitName, @Param( "wordScoreViewList" ) List<WordScoreView>  wordScoreViewList);

注意:

需要再前后增加<script></script> 标签

循环使用

<foreach collection='wordScoreViewList' open='(' item='wordScore' separator=',' close=')'> 
    #{wordScore.word}
</foreach>

mybatis中的foreach语句简介

mybatis中的foreach语句适用于多种业务场景,主要起的作用是迭代集合。

在实际应用场景中,使用一个正确的foreach能够提高执行效率,所以通过记录最近一次使用foreach的具体场景来了解foreach的具体实现。

Mybatis的foreach语法

通过业务层传入一个LIst集合,其中存放了一批id号,List list 随后我要对此集合中的id取出依次遍历,即写法如下

select * from user where 1=1
<if test="id != null">
    and id in
    <foreach item="item" index="index" collection="list"  open="(" separator="," close=")">
   		'#{item}'
	</foreach>
</if>

等同于以下的mysql写法:

select * from user where id in (1,2,3,4,5)

其中需要注意的是collection参数后面的值要与变量名保持一致,我这里为list则需要保持一致,关于这几个参数的详解在文末会有介绍。

进阶写法

假如我传过来的是一个以,为分隔符的连贯字符串,例如某个对象中有一个属性String extInfo = “1,2,3,4,5”,依然跟上述的业务场景一致,那我们就需要先将该字符串做处理之后再进行foreach迭代

select * from user where 1=1
<if test="extInfo != null">
    and id in
    <foreach item="item" index="index" collection="extInfo.split(',')"  open="(" separator="," close=")">
   		'#{item}'
	</foreach>
</if>

还有一种业务场景是针对Map的迭代,例如有一个key-value对应的是ids-List,我们也能通过foreach迭代该map下的ids键来实现

select * from user where 1=1
<if test="extInfo != null">
    and id in
    <foreach item="item" index="index" collection="ids"  open="(" separator="," close=")">
   		'#{item}'
	</foreach>
</if>

原理

上述的foreach应用场景主要解决了使用in语句迭代批量查询,迭代删除以及迭代编辑等批量操作,那其中的参数具体是什么意思呢。

  • item表示集合中每一个元素进行迭代时的别名
  • index表示索引
  • collection表示要迭代的集合
  • open表示前缀的拼接内容
  • separator表示迭代集合
  • close表示后缀的拼接内容

基本语法就包括了上述的6个参数,各个参数都代表着各自的含义,在实际应用中使用foreach迭代能够帮助我们完成各类批量操作。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 在IntelliJ IDEA中使用gulp的方法步骤(图文)

    在IntelliJ IDEA中使用gulp的方法步骤(图文)

    这篇文章主要介绍了在IntelliJ IDEA中使用gulp的方法步骤(图文),小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-01-01
  • SpringBoot中定制异常页面的实现方法

    SpringBoot中定制异常页面的实现方法

    这篇文章主要介绍了SpringBoot中定制异常页面的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • Java的Flowable工作流之加签转签详解

    Java的Flowable工作流之加签转签详解

    这篇文章主要介绍了Java的Flowable工作流之加签转签详解,Flowable是一个开源的工作流引擎,它提供了一套强大的工具和功能,用于设计、执行和管理各种类型的工作流程,需要的朋友可以参考下
    2023-11-11
  • Java NIO实现聊天室功能

    Java NIO实现聊天室功能

    这篇文章主要为大家详细介绍了Java NIO实现聊天室功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-11-11
  • java中生成任意之间数的随机数详解

    java中生成任意之间数的随机数详解

    这篇文章主要介绍了java中生成任意之间数的随机数详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09
  • 基于java HashMap插入重复Key值问题

    基于java HashMap插入重复Key值问题

    这篇文章主要介绍了基于java HashMap插入重复Key值问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • java数据库数据分批读取的实现示例

    java数据库数据分批读取的实现示例

    在处理大量数据时,直接从数据库一次性读取所有数据可能会导致内存溢出或者性能下降,本文就来介绍一下java数据库数据分批读取的实现示例,感兴趣的可以了解一下
    2024-01-01
  • 使用注解进行Spring开发的全过程

    使用注解进行Spring开发的全过程

    使用注解(Annotation)是一种在代码级别进行说明和标记的技术,它从JDK 5.0开始引入,并在现代Java开发中得到了广泛应用,本文将详细介绍Spring框架中常用的注解及示例,帮助开发者快速掌握Spring注解开发的要点和技巧,需要的朋友可以参考下
    2023-11-11
  • Java集合List相关面试题整理大全

    Java集合List相关面试题整理大全

    这篇文章主要给大家介绍了关于Java集合List相关面试题整理的相关资料,下面将提供一些常见的Java集合类面试题及其解答,帮助读者更好地准备面试,需要的朋友可以参考下
    2024-01-01
  • idea解决Git分支合并冲突问题

    idea解决Git分支合并冲突问题

    这篇文章主要介绍了idea解决Git分支合并冲突问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-08-08

最新评论