一些时候需要将一些数据批量的进行操作,比如:根据ids批量查询、更新、删除、将一个集合的数据插入数据库。简单的操作是单条的循环遍历后执行对应的操作。稍微有点经验的程序员往往都是偷懒的,有没有批量的操作方法,答案是肯定的,mybatis 提供了<foreach> 的标签。
开发者可以通过在Mapper中定义一个方法:
int insertBatch(List<Student> list)
然后在xml中使用foreach循环处理,让mybatis 帮助我们批量生成sql的预处理语句。
<insert id="insertBatch" parameterType="list" >
insert into tb_student ( name,age)
values
<foreach collection="list" item="item" index="index" separator=",">
( #{item.name,jdbcType=VARCHAR}, #{item.age,jdbcType=INTEGER})
</foreach>
</insert>
foreach元素的属性主要有 item,index,collection,open,separator,close。
item表示集合中每一个元素进行迭代时的别名,
index指 定一个名字,用于表示在迭代过程中,每次迭代到的位置,
open表示该语句以什么开始,
separator表示在每次进行迭代之间以什么符号作为分隔 符,
close表示以什么结束。
collection属性这个比较容易出现问题,大部分情况下我们使用list传入,但也有其它的写法
1. 方法定义为 queryListByIds(@Param("ids") List ids)
这时应写为<foreach collection="ids" ...>
2. 方法定义为 queryListByIds(int[] ids),这里是传入一个数组
这时应写为<foreach collection="array" ...>
3.当方法传入map时,map的value有一个集合
这时应写为:
<select id="selectByNameAndIds" resultType="map">
select name,age from student where name =#{name} and id in
<foreach collection="ids" index="index" item="item" open="(" separator="," close=")">
#{item}
</foreach>
</select>
上述collection的值为ids,是传入的参数Map的key,对应的Mapper代码:
public Map selectByNameAndIds(Map params);
-----------------
都是一些日常总结,
如果您觉得有帮助的话,记得 评论,关注,转发,收藏,双击么么哒。
-----------------
网友评论