<insert id="insert" >
insert into user (id)
values
<foreach collection="ids" item="id" index="index">
(#{id,jdbcType=INTEGER} )
</foreach>
</insert>
这是mybatis动态sql批量插入,
第一个实例,foreach里面跟正常的java foreach一样,collection是传入的集合ids,item是遍历过程中的对象,index也就是遍历的第几次
所以上面这个动态sql可以转化为 insert into user (id) values (id) (id)....... 这个(id)是foreach循环的次数
现在传入一个参数跟一个集合,比如,(String class,list<student> students),这样传入mapper的,如何批量插入实现 同一班级与不同学生多条记录
<insert id="insert">
INSERT INTO
user
(student, class)
VALUES
<foreach collection="students" item="student" separator=",">
(#{student,jdbcType=VARCHAR}, #{class,jdbcType=VARCHAR})
</foreach>
</insert>
可以按上面这样写,虽然class不是一个集合,但是这样写也可以跟着students的遍历,将同一班级下的不同学生都插入到数据库
解析语句:foreach是正常的java用法,collection后面是集合students,item是每次遍历的对象student,
不过这次添加了separator是以什么分离的意思,因为foreach中class与student后面是个逗号,所以写成separator=","
后面还可以写 or and等分割,以实际情况为准。
所以现在这个sql语句为: insert into user (student,class) values (student,class)(student,class).......
可以完成单个参数跟集合循环批量插入的情况。
注意写动态sql跟sql语句一样,要注意前后参数的位置顺序的照应。