015MyBatis中foreach用法

本文详细介绍了MyBatis中foreach元素的使用,包括在select、insert和update语句中的应用。foreach支持collection、index、item、open、close和separator等属性,可用于遍历集合并构建动态SQL。示例展示了如何通过foreach实现批量插入和更新操作,甚至处理复杂的动态SQL,如利用case函数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

foreach元素主要用于对一个集合(List、Set、Map、数组)进行遍历
foreach支持如下属性
collection:指定要遍历的集合
【也就是传过来的参数,但是不能用param和arg0,要么注解指定参数名。要么用默认的参数名list/set/map/array,当然这个时候的参数只有一个】
index: 在map中代表key,其他集合可以不用指定
item:在map中代表value,其他集合代表当前遍历的元素,充当变量
open:循环开始处放置的字符串
close:循环结束出放置的字符串
separator:每次迭代之间的分隔符
tips:上述属性中最后三个属性与trim元素中的属性一致

select中使用foreach

查询news_id 在数组范围内的记录

<select id="queryNews" databaseId="mysql" resultMap="newsMapper">
        select * from news_inf where news_id in
<foreach collection="arr" item="item"  open="(" separator="," close=")">
        #{item}
 </foreach>
newsMapper.queryNews(new int[]{1,3});

insert中使用foreach(批量插入)

<insert id="insertNews" databaseId="mysql" >
   insert into news_inf values
<foreach collection="list" item="news" separator=",">
   (#{news.id},#{news.title},#{news.content},#{news.status})
</foreach>
</insert>
 var news1 = new News(null,"title1","content1",null);
        var news2 = new News(null,"title2","content2","ACTIVE");
        var news3 = new News(null,"title3","content3","LAZY");
var list = new ArrayList<News>();
list.add(news1);
list.add(news2);
list.add(news3);
int i = newsMapper.insertNews(list);

update中使用foreach(批量更新)

  <update id="updateNews" databaseId="mysql" >
        update news_inf
<set>
   <foreach collection="list" item="news" open="news_title=case" close="end," separator=" ">
       <if test="news.title != null">
           when news_id = #{news.id} then #{news.title}
       </if>
   </foreach>
   <foreach collection="list" item="news" open="news_content=case" close="end" separator=" ">
       <if test="news.content != null">
           when news_id = #{news.id} then #{news.content}
       </if>
   </foreach>
</set>
   <where>
       news_id in (1,2,3)
   </where>
</update>
News news1 = new News(1,"标题1","内容1",null);
News news2 = new News(2,"标题2","内容2",null);
News news3 = new News(3,"标题3","内容3",null);
var list = new ArrayList<News>();
list.add(news1);
list.add(news2);
list.add(news3);
var i = newsMapper.updateNews(list);

最后一个例子稍微复杂点,其中利用了case函数,说明了foreach可以灵活的完成一些复杂的动态sql语句

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值