当进行大批量数据插入(例如excel导入)时候;很明显每一条数据运行一条sql语句是不合理的,时间就是金钱、这种把时间浪费在重复的和spring管理据库连接池建立、断开连接的行为是低效的;
oracle的批量插入和MySQL不一样,在springMVC的xml文件中写法如下
①传参parameterType是个对象的List集合。
②collection="list" 是固定写法;item="dealCp" 这里建议写你的对象名称;
separator
UNION操作符用于合并两个或多个SELECT语句的结果集;UNION内部的SELECT语句必须拥有相同数量的列,列也必须拥有相似的数据类型,同时,每条SELECT语句中列的顺序必须相同;
union操作符合并的结果集,不会允许重复值,如果允许有重复值的话,separator="union all"
③ 前面的i是实体类中的属性名称,后面的jdbcType=VARCHAR是对应字段的数据库中的类型,不可写错;
1 <!-- 银行数据导入 --> 2 <insert timeout="100" id="insertBankList" parameterType="java.util.List" > 3 INSERT INTO bank_deal( 4 id, 5 batch_number, 6 code, 7 name, 8 card, 9 bank_card, 10 money, 11 dates, 12 time 13 ) 14 <foreach collection="list" item="dealCp" separator="union all"> 15 SELECT #{dealCp.bankId,jdbcType=VARCHAR}, 16 #{dealCp.batchNumber,jdbcType=VARCHAR}, 17 #{dealCp.code,jdbcType=VARCHAR}, 18 #{dealCp.name,jdbcType=VARCHAR}, 19 #{dealCp.card,jdbcType=VARCHAR}, 20 #{dealCp.bankCard,jdbcType=VARCHAR}, 21 #{dealCp.money,jdbcType=VARCHAR}, 22 #{dealCp.dates,jdbcType=VARCHAR}, 23 #{dealCp.time,jdbcType=VARCHAR} 24 FROM dual 25 </foreach> 26 </insert>
可能运行后出现报错 无效主机绑定名;通信通道收到中断;用户取消当前操作的问题;请移步我另外一篇博客