环境:mybatis+oracle
功能需求:做项目时遇到一个需求,需要把几条数据批量插入到数据库。
内容:开始做的时候,一下子就想到了
insert into table (ID,IMAGE_URL,STATE,UPDATE_TIME, PATROL_RECORD_ID,UPDATE_USER_OPENID)
values
(#{item.ID,jdbcType=VARCHAR}, #{item.IMAGE_URL,jdbcType=VARCHAR}, #{item.STATE,jdbcType=VARCHAR},
#{item.UPDATE_TIME,jdbcType=TIMESTAMP},#{item.PATROL_RECORD_ID,jdbcType=VARCHAR},
#{item.UPDATE_USER_OPENID,jdbcType=VARCHAR})
但是测试的时候,就是报错,启动不了项目,怎么办?内事不决问百度喽:
然后就发现了上面那种批量插入的方法是MySQL的,不是oracle的,百度了一圈发现了几种方法:
insert into table (ID,IMAGE_URL,STATE,UPDATE_TIME, PATROL_RECORD_ID,UPDATE_USER_OPENID)
select
#{item.ID,jdbcType=VARCHAR}, #{item.IMAGE_URL,jdbcType=VARCHAR}, #{item.STATE,jdbcType=VARCHAR},
#{item.UPDATE_TIME,jdbcType=TIMESTAMP},#{item.PATROL_RECORD_ID,jdbcType=VARCHAR},
#{item.UPDATE_USER_OPENID,jdbcType=VARCHAR}
from dual
注意:入参仍然是list集合,sql中有values,本质是利用存储过程实现批量插入;
<
insert
id
=
"insertPlanRepaymentOtherfeeBatch"
parameterType
=
"java.util.List"
>
begin
<
foreach
collection
=
"list"
item
=
"item"
index
=
"index"
>
insert into table(id,key,value,term,contract_id,PAY_ORDER)
values
(SEQ_LB_T_PLAN_REPAY_OTHERFEE.nextval,#{item.key,jdbcType=VARCHAR}
,#{item.value,jdbcType=VARCHAR},#{item.term,jdbcType=DECIMAL}
,#{item.contractId,jdbcType=VARCHAR},#{item.payOrder,jdbcType=DECIMAL}
);
foreach
>
end;
insert
>
3.
第三种方式:使用特殊的sql语句(百度的,待验证)注意:当list的size大于500时,会失败;
参考博客:http://blog.csdn.net/w_y_t_/article/details/51416201
下面这条sql语句可以实现一条语句批量插入!
|
翻译成mybatis语句如下:
|