Mybatis使用注解两种方式实现批量操作

@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();
	
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值