项目中,考虑到性能问题,想使用mybaits的批量插入功能,但是一直报错。
错误sql如下
<insert id="insertGroupRecord" parameterType="List">
INSERT INTO INFO_GROUP_RECORD
(ID
, SEND_RECORD_ID
, GROUP_NAME
, SUBSCRIBER_ID
, SUBSCRIBER_NAME
, SEND_RESULT
, USER_ID
, CREATE_TIME
, UPDATE_TIME
, CREATE_BY
, UPDATE_BY
, REMARK
, GROUP_ID
, SUBSCRIBER_PHONE) VALUES
<foreach collection="list" item="infoGroupRecordList" index="index" separator=",">
(
#{infoGroupRecordList.id, jdbcType=VARCHAR}
, #{infoGroupRecordList.sendRecordId, jdbcType=VARCHAR}
, #{infoGroupRecordList.groupName, jdbcType=VARCHAR}
, #{infoGroupRecordList.subscriberId, jdbcType=VARCHAR}
, #{infoGroupRecordList.subscriberName, jdbcType=VARCHAR}
, #{infoGroupRecordList.sendResult, jdbcType=CHAR}
, #{infoGroupRecordList.userId, jdbcType=VARCHAR}
, #{infoGroupRecordList.createTime}
, #{infoGroupRecordList.updateTime}
, #{infoGroupRecordList.createBy, jdbcType=VARCHAR}
, #{infoGroupRecordList.updateBy, jdbcType=VARCHAR}
, #{infoGroupRecordList.remark, jdbcType=VARCHAR}
, #{infoGroupRecordList.groupId, jdbcType=VARCHAR}
, #{infoGroupRecordList.subscriberPhone, jdbcType=VARCHAR}
)
</foreach>
</insert>
上面的错误提示是,命令未正确结束
因为oracle批量Insert的时候,不支持insert…value(),()的语法
正确批量insert语句如下
<insert id="insertGroupRecord" parameterType="List">
INSERT INTO INFO_GROUP_RECORD
(ID
, SEND_RECORD_ID
, GROUP_NAME
, SUBSCRIBER_ID
, SUBSCRIBER_NAME
, SEND_RESULT
, USER_ID
, CREATE_TIME
, UPDATE_TIME
, CREATE_BY
, UPDATE_BY
, REMARK
, GROUP_ID
, SUBSCRIBER_PHONE) (
<foreach collection="list" item="infoGroupRecordList" index="index" separator="union all">
select
#{infoGroupRecordList.id, jdbcType=VARCHAR}
, #{infoGroupRecordList.sendRecordId, jdbcType=VARCHAR}
, #{infoGroupRecordList.groupName, jdbcType=VARCHAR}
, #{infoGroupRecordList.subscriberId, jdbcType=VARCHAR}
, #{infoGroupRecordList.subscriberName, jdbcType=VARCHAR}
, #{infoGroupRecordList.sendResult, jdbcType=CHAR}
, #{infoGroupRecordList.userId, jdbcType=VARCHAR}
, #{infoGroupRecordList.createTime}
, #{infoGroupRecordList.updateTime}
, #{infoGroupRecordList.createBy, jdbcType=VARCHAR}
, #{infoGroupRecordList.updateBy, jdbcType=VARCHAR}
, #{infoGroupRecordList.remark, jdbcType=VARCHAR}
, #{infoGroupRecordList.groupId, jdbcType=VARCHAR}
, #{infoGroupRecordList.subscriberPhone, jdbcType=VARCHAR}
from dual
</foreach>
)
</insert>