记一次MyBatis动态sql的foreach标签实战应用

动态 SQL 是 MyBatis 的强大特性之一。如果你使用过 JDBC 或其它类似的框架,你应该能理解根据不同条件拼接 SQL 语句有多痛苦,稍有不慎,还会造成sql语法错误,例如拼接时要确保不能忘记添加必要的空格,还要注意去掉列表最后一个列名的逗号。利用动态 SQL,可以彻底摆脱这种烦恼。

说到Mybatis的动态sql,不得不提到foreach元素标签,它的功能非常强大,允许你指定一个集合,声明可以在元素体内使用的集合项(item)和索引(index)变量。也允许你指定开头与结尾的字符串以及集合项迭代之间的分隔符。这个元素也不会错误地添加多余的分隔符!你可以将任何可迭代对象(如 List、Set 等)、Map 对象或者数组对象作为集合参数传递给 foreach。当使用可迭代对象或者数组时,index 是当前迭代的序号,item 的值是本次迭代获取到的元素。当使用 Map 对象(或者 Map.Entry 对象的集合)时,index 是键,item 是值。

具体属性介绍如下

在这里插入图片描述

项目实战代码如下:

1.循环数组

dao中写法:

 List<UserFile> getFileResult(@Param(value="queryArray")String[] queryArray);

xml中写法:

<select id="getFileResult" resultType="com.xx.entity.UserFile">
	select uf.id,uf.file_id fileId,uf.file_name fileName,uf.file_size fileSize,uf.file_description fileDescription,
	uf.parent_id parentId,uf.file_type fileType,uf.is_dir isDir,
	from user_file uf left join file_label fl
	on uf.id = fl.userfile_id where uf.del_flag=1
	<if test="queryArray != null and queryArray.length > 0 ">
		and fl.label_id in
		<foreach collection="queryArray" index="index" item="item" open="(" separator="," close=")">
			#{item}
		</foreach>
	</if>
	ORDER by uf.id DESC
</select>

2.循环集合

dao中写法:

List<Label> findLabelInfoByFileIdList(@Param(value="fileIdList") List<Long> fileIdList);

xml中写法:

<select id="findLabelInfoByFileIdList" parameterType="java.util.List" resultType="com.xx.entity.Label">
    select la.id,la.name,fl.userfile_id userFileId from label la,file_label fl
    where la.id = fl.label_id
    <if test="fileIdList != null and fileIdList.size() > 0 ">
      and fl.userfile_id in
      <foreach collection="fileIdList" index="index" item="item" open="(" separator="," close=")">
        #{item}
      </foreach>
    </if>
</select>

备注:数组和集合对应的collection属性都有对应的默认值,分别是array和list,如果dao中的@Param注解中没有添加的话,需要将collection属性换成array或list,不过个人建议尽量使用注解声明为自己定义的参数,以便更好的知道参数的实际意义。

除此之外,Mybatis的动态sql还有更多其他属性标签,比如if、choose、when、otherwise、trim、where、set、bind等标签,这些属性对于条件判断、字符串去空、过滤筛选、以及创建变量绑定到上下文等,很好的支持了Mybatis的动态属性,如果大家有兴趣,可以一一去实践,此处不再额外赘述。希望这篇文章能够对你有所帮助,让你对Mybatis有个更好的理解和应用。

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

一起随缘

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

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

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

打赏作者

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

抵扣说明:

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

余额充值