@Insert({ "<script>",
"insert into `training_type`(`UUID`, `NAME`, `REMARK`,`IS_DELETED`,`CREATE_TIME`,`MODIFY_TIME`) values ",
"<foreach collection='list' item='item' index='index' separator=','>",
"( #{item.uuid},#{item.name},#{item.remark},#{item.isDeleted},#{item.createTime},#{item.modifyTime} ) ",
"</foreach>", "</script>" })
@Options(useGeneratedKeys = true)
int addUserTest(@Param("list") List<TrainingType> lists);
相关术语解释:
collection: 指定要遍历的集合(三种情况 list,array,map) !!!!在这种使用注解sql的情况下,这里请填写mapper方法中集合的名称
item:将当前遍历出的元素赋值给指定的变量 (相当于for循环中的i)
separator:每个元素之间的分隔符
index:索引。遍历list的时候是index就是索引,item就是当前值
#{变量名}就能取出变量的值也就是当前遍历出的元素
在下面的程序中直接获取List中的Test的id属性即可lists.get(0).getId。
注意@Param一定要是list;不然获取id会为空
第二种方式
使用@InsertProvider注解
@InsertProvider(type =StandardNoticeRecordSqlprovider.class, method="addStandardNoticeRecord" )
int addStandardNoticeRecord(@Param("list")List<StandardNoticeRecord> lists );
import java.text.MessageFormat;
import java.util.List;
import java.util.Map;
import com.czhl.training.notice.repository.model.StandardNoticeRecord;
public class StandardNoticeRecordSqlprovider {
@SuppressWarnings({ "unchecked", "rawtypes" })
public String addStandardNoticeRecord(Map map) {
List<StandardNoticeRecord> lists =(List<StandardNoticeRecord>) map.get("list");
StringBuilder builder = new StringBuilder();
builder.append(" INSERT INTO `standard_notice_record` ");
builder.append(" (`UUID`, `STANDARD_NOTICE_ID`, `WECHAT_USER_ID`, `TRAINING_ID`, `IS_DELETED`, `CREATE_TIME`, `MODIFY_TIME`,`SEND_TIME`,`TITLE`) ");
builder.append(" VALUES ");
MessageFormat messageFormat = new MessageFormat(" (#'{'list[{0}].uuid}, #'{'list[{0}].standardNoticeId}, #'{'list[{0}].wechatUserId}, #'{'list[{0}].trainingId}, #'{'list[{0}].isDeleted}, #'{'list[{0}].createTime}, #'{'list[{0}].modifyTime}, #'{'list[{0}].sendTime}, #'{'list[{0}].title}) ");
for (int i = 0; i < lists.size(); i++) {
builder.append(messageFormat.format(new Object[]{i}));
if (i<lists.size()-1) {
builder.append(",");
}
}
return builder.toString();
}
}