今天做了一个批量新增的功能,本来是可以用for循环一条一条插入的,但是后来发现执行效率很低,就换成了批处理执行。
mapper文件如下:
void insertBatch(List<WxGrant> list);
xml文件如下:
<insert id="insertBatch" parameterType="java.util.List">
insert into T_WX_GRANT
(ID,CREATE_DATE, UPDATE_DATE,DELETE_FLAG,POST_FLAG,OPEN_ID, ACTIVITY_NAME,
ADDRESS, EXPRESS_COMPANY, TRACKING_NUMBER,
DELETE_DATE)
SELECT seq_wx_grant.nextval,sysdate,sysdate,0,m.* FROM (<foreach collection="list" item="item" index="index" separator="UNION ALL">
( SELECT
#{item.openId,jdbcType=VARCHAR}, #{item.activityName,jdbcType=VARCHAR},
#{item.address,jdbcType=VARCHAR}, #{item.expressCompany,jdbcType=VARCHAR}, #{item.trackingNumber,jdbcType=VARCHAR},
#{item.deleteDate,jdbcType=TIMESTAMP} FROM DUAL
)</foreach>) m
</insert>
PS: seq_wx_grant.nextval为自增序列;sysdate 系统时间(这样不用再代码里面new date()了)
mybatis的配置文件中加入以下代码,避免造成锁表的问题
<bean id="sqlSession_mm" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg index="0" ref="sessionFactory_mm" />
<constructor-arg index="1" value="BATCH" />
</bean>