ibatis批量插入

方法一:

开启一个事物,使用for或者while循环遍历待插入的对象集合,逐一插入,具体代码略

方法二:

<!-- 插入规则条件 -->
     <insert id="insertRuleConditionInfo"  parameterClass="java.util.List">
          insert into
          RULE_CONDITION_INFO
          (RULE_CONDITION_ID,
          RULE_GROUP_ID,
          RULE_TEMPLATE_ID,
          RULE_TEMPLATE_VALUE,
          RULE_TEMPLATE_REL)
          select
          SEQ_RULE_CONDITION_INFO.nextval, rule_group_id,
          rule_template_id,rule_template_value,rule_template_rel
          from (
          <iterate conjunction="union all">
              select
              #v[].rule_group_id# rule_group_id,
              #v[].rule_template_id# rule_template_id,
              #v[].rule_template_value#
              rule_template_value,
              #v[].rule_template_id# rule_template_rel
              from dual
          </iterate>
          ) a
     </insert>

缺点:
这种方式 是先将List里面的值,循环拼接成一个查询虚拟表,然后再通过查询虚拟表,获取每一行的数据插入到你需要插入的表里面去,所以你拼接的SQL语句的长度不能超过有没有超过64KB(Oracle的最大长度)

方法三、

< insert  id =" insert_table "  parameterClass ="java.util.List" >   
    <![CDATA[  
        insert into test( col1 , col2 , col3 ) values  
    ]]>    
    < iterate  conjunction ="," >   
        <![CDATA[  
            (#test[]. col1 #, # test []. col2 #, # test []. col3 #)  
        ]]>   
    </ iterate >   
</ insert >

注意:
这个方式没去尝试,但是网上说oralce不支持该方式,mysql支持

方法四、

<insert id="templateStationRelInsert" parameterClass="java.util.List">
		INSERT All
		<iterate conjunction=" ">
			INTO template_station_rel
			(template_id,station_id,create_data)
			VALUES
			(#list[].template_id#, #list[].station_id#,sysdate)
		</iterate>

		SELECT * FROM dual

	</insert>

缺点:
这种方式,Oracle支持,其他的数据库就不知道支不支持,但是插入的表的列数* 你插入的行数 <1000才有效
如:有13列字段,总共需要插入266行,在执行的时候,他就报:ORA-24335 cannot support more than 1000 columns

关于四种方式的执行效率没有去测试,不知道哪一种方式最快。因为本次插入只是插入一个政策,数据量小。后续有时间补充

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值