spring boot批量插入execl的方法

该文章展示了一种在Java中使用NamedParameterJdbcTemplate进行批量数据插入的方法。首先初始化jdbcTemplate,然后定义一个函数batchInsert,将TencentUsage对象转换为MapSqlParameterSource参数列表,执行SQL批量更新。最后,调用这个方法并进行日志记录,表明能在1秒内处理大约10000条记录。

1、注入必要的jebdTemple

private val jdbcTemplate: NamedParameterJdbcTemplate



2、编写批量插入的方法

		private fun batchInsert(usages: List<TencentUsage>) {
		val sources = usages.map {
			MapSqlParameterSource()
				.addValue("billing_cycle", it.billingCycle.toString())
				.addValue("record_id", it.recordId)
				.addValue("resource_id", it.resourceId)
				.addValue("resource_name", it.resourceName)
				.addValue("product_name", it.productName)
				.addValue("sub_product_name", it.subProductName)
				.addValue("component_type", it.componentType)
				.addValue("component_name", it.componentName)
				.addValue("transaction_type", it.transactionType)
				.addValue("vendor_id", it.vendorId)
				.addValue("sub_vendor_id", it.subVendorId)
				.addValue("start_time", it.startTime)
				.addValue("end_time", it.endTime)
				.addValue("duration", it.duration)
				.addValue("duration_unit", it.durationUnit)
				.addValue("size", it.size)
				.addValue("size_unit", it.sizeUnit)
				.addValue("amount", it.amount)
		}
		jdbcTemplate.batchUpdate(
			""" insert into tencent_usage (
				    billing_cycle,record_id,resource_id,resource_name,product_name,
					sub_product_name,component_type,component_name,transaction_type,vendor_id,sub_vendor_id,start_time,
					end_time,duration,duration_unit,size,size_unit,amount)
					values(
					:billing_cycle,:record_id,:resource_id,:resource_name,:product_name,
					:sub_product_name,:component_type,:component_name,:transaction_type,:vendor_id,:sub_vendor_id,:start_time,
					:end_time,:duration,:duration_unit,:size,:size_unit,:amount)
					ON conflict(record_id)  DO NOTHING;
					""",
			sources.toTypedArray()
		)
	}

3、调用批量插入的方法

	fun saveAll(tencentUsages: List<TencentUsage>, billingCycle: YearMonth) {
		if (tencentUsages.isNotEmpty()) {
			logger.info("tencentUsage save db,size=${tencentUsages.size}")
			batchInsert(tencentUsages)
			
		}
	}

4、验证结果

可以做到1秒10000条左右

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MonkeyKing.sun

对你有帮助的话,可以打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值