mybatis配置,注解方式批量插入数据

方式一:基于xml配置形式

<insert id="batchInsert">
    INSERT INTO device
            (IMEI,deviceDetail)
    VALUES
    <foreach collection ="list" item="device" separator =",">
         (#{device.IMEI}, #{device.deviceDetail)
    </foreach >
</insert>

 

方式二:基于注解方式

Mapper类

@InsertProvider(type=BatchInsertDevice.class,method="batchInsertDevice")
  void batchInsertDevice(@Param("list")List<Device> devList);

由于void batchInsertDevice(@Param("list")List<Device> devList)中的参数是List并指定名称为list故type参数中BatchInsertDevice类中batchInsertDevice方法的参数必须是Map<String,List<Device>>类型(可能是mybatis自动做了转换,若参数不为Map<String,List<Device>>会出现Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@4cdac0de]

Parameter 'arg0' not found. Available parameters are [collection,list]异常)

public String batchInsertDevice(Map<String,List<Device>> map) {
		System.out.println("batchInsertDevice");
//      获取真正的参数
		List<Device> devList = map.get("list");
		StringBuilder sql = new StringBuilder();
		sql.append("insert into device ");
		sql.append("(IMEI,deviceDetail) values");
		for (int i = 0; i < devList.size(); i++) {
//这里的list为在map中的key值
			sql.append("(#{list[+"+i+"].IMEI},#{list["+i+"].deviceDetail}");
			if(i!=devList.size()-1){
				sql.append(",");
			}else
				sql.append(";");
		}
		System.out.println(sql.toString());
		return sql.toString();
	}

还需要在service类上添加@Transactional注解

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值