MyBatis 中,foreach 标签可用于批量插入记录,当然,批量插入的方式有很多,本篇文章主要讲解在 mapper 文件中,使用 foreach 标签批量插入。
collection(必选)
collection 属性是 foreach 标签中最复杂的一个属性,不过别慌,我们今天就要把它捋直了。首先我们需要明白,mybatis 在使用 foreach 标签批量插入数据时,会将 DAO 方法中参数封装成 Map 类型,然后在 collection 属性中,指定批量数据源所在 Map 中的 key,通这个 key 拿到批量数据源。到这里我们明白了,其实 collection 属性就是 key 嘛 -_-。明白了这个,我们再深入
- 如果只有一个参数
- 参数类型是 「List」:key 默认为 list 或 collection,如果要修改这个默认名,用 @Param 注解即可
- 参数类型是 「数组」:key 默认为 array,修改默认名同 List
- 参数类型是 「Map」: 很遗憾,单个参数时将因取不到值而异常,但多个参数时可以用此类型
- 参数类型是 「对象」:key 需要指定对象中类型为「List」或「数组」的属性,且这个属性必须有 get 方法
- 如果有多个参数
- key 默认为参数名,取的是什么名就是什么;同时,mybatis 也会按参数顺序,为每个参数默认生成名为 param1,param2,... 的 key,不过很少用
- 批量数据源类型可以是 List、数组、Map。如果是 Map,值可以放对象或另一个 Map,整出一些复杂插入
item(必选)
每一个元素进行迭代时的别名,可以随便取
index(可选)
- 参数类型是 List 或 数组: 值为每次迭代到的下标位置
- 参数类型是 Map:值为 key
- 名字随便取
separator(可选)
表示在每一次进行迭代之间以什么符号作为分隔符
open(可选)
整个循环完成时,遍历出的所有结果拼接一个开始的字符,而不是每一次
close(可选)
同 open,只是在结束位置
其它
- mybatis 插入成功后返回的是本次插入的总条数,而不是成功与否的状态