mybatis注解开发使用foreach方式
作者:寻梦太极
这篇文章主要介绍了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迭代能够帮助我们完成各类批量操作。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。