开发者

mybatis注解开发使用foreach方式

开发者 https://www.devze.com 2024-08-20 10:40 出处:网络 作者: 寻梦太极
目录myBATis注解开发使用foreach写法看代码循环使用mybatis中的foreach语句简介Mybatis的foreach语法进阶写法原理总结javascriptmybatis注解开发使用foreach
目录
  • myBATis注解开发使用foreach
    • 写法看代码
    • 循环使用
  • mybatis中的foreach语句简介
    • Mybatis的foreach语法
    • 进阶写法
    • 原理
  • 总结javascript

    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>
    • collection 遍历的类型,(集合为list,数组为array,如果方法参数是对象的某个属性,而这个属性是list,或array类型,就可以写形参的名字)
    • open 条件的开始
    • close 条件的结束
    • item 遍历集合时候定义的临时变量,存储当前遍历的每一个值
    • separator 多个值之间用逗号拼接
    • #{wordScore.word} 获取遍历的每一个值,与item定义的临时变量一致,item变量是一个实体,要获取里面word属性

    mybatis中的foreach语句简介

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

    在实际应用场景中,使用一个正确的foreach能够提高执行效率,所以通过记录最近一次使用foreach的具体场javascript景来了解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}'
    	&erLRTvlt;/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 ierLRTvd in
        <foreach item="item" index="index" collection="ids"  open="(" separator="," close=")">
       		'#{item}'
    	</foreach>
    </if>

    原理

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

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

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

    总结

    以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程客栈(www.cppcns.http://www.devze.comcom)。

    0

    精彩评论

    暂无评论...
    验证码 换一张
    取 消

    关注公众号