ExecutorType.BATCH
1w数据插入大概在3s左右
ServiceImpl层
@Autowired
private SqlSessionTemplate sqlSessionTemplate;
try (SqlSession session = sqlSessionTemplate.getSqlSessionFactory().openSession(ExecutorType.BATCH, false)) {
LzIndexDataMapper indexDataMapper = session.getMapper(LzIndexDataMapper.class);
dataValueList.forEach(data -> indexDataMapper.insert(data));
session.commit();
} catch (Exception e) {
e.printStackTrace();
}
Mapper.xml
<insert id="insert" parameterType="com.mysteel.dataprocessing.excel.soda.parse.mapper.po.IndexDataPo">
INSERT INTO <include refid="tableName"/> (
LZ_CODE, CN_NAME, DATA_DATE, DATA_VALUE, CREATE_TIME, UPDATE_TIME
) values
(
#{lzCode, jdbcType=VARCHAR},
#{cnName, jdbcType=VARCHAR},
#{dataDate, jdbcType=VARCHAR},
#{dataValue, jdbcType=VARCHAR},
#{createTime, jdbcType=BIGINT},
#{updateTime, jdbcType=BIGINT}
)
</insert>
更新插入——Merge into用法
<insert id="insertAndUpdate">
merge into LZ_HGVA_MID t1 using LZ_HGVA_MID_TEMP t2
on (t1.cn_name = t2.cn_name and t1.data_date = t2.data_date)
WHEN MATCHED THEN
UPDATE SET t1.data_value = t2.data_value
WHEN NOT MATCHED THEN
INSERT (t1.lz_code,t1.cn_name,t1.data_date,t1.data_value,t1.create_time,t1.update_time)
VALUES (t2.lz_code,t2.cn_name,t2.data_date,t2.data_value,t2.create_time,t2.update_time)
</insert>
selectKey查询返回当前序列
<insert id="insertModel" parameterType="com.mysteel.dataprocessing.lz.excel.parser.mapper.po.IndexDataModelPo">
<selectKey order="BEFORE" resultType="java.lang.Integer" keyProperty="id" keyColumn="id">
select LZ_HGVA_MODEL_MID_SEQ.nextval from dual
</selectKey>
INSERT INTO
<include refid="tableName"/>
(
ID,PROJ_NAME, BREED_NAME, MODEL, CREATE_TIME, UPDATE_TIME
) values
(
#{id, jdbcType=INTEGER},
#{projName, jdbcType=VARCHAR},
#{breedName, jdbcType=VARCHAR},
#{model, jdbcType=VARCHAR},
#{createTime, jdbcType=BIGINT},
#{updateTime, jdbcType=BIGINT}
)
</insert>
foreach标签方式
1w数据插入在9s左右
<insert id="batchInsert" parameterType="java.util.List">
INSERT INTO
<include refid="tableName"/>
(<include refid="insertColumn"/>)
<foreach collection="list" index="index" item="item" separator="union all">
(SELECT
#{item.id, jdbcType=BIGINT},
#{item.lzCode, jdbcType=VARCHAR},
#{item.cnName, jdbcType=VARCHAR},
#{item.dataDate, jdbcType=DATE},
#{item.dataValue, jdbcType=VARCHAR},
#{item.createTime, jdbcType=BIGINT},
#{item.updateTime, jdbcType=BIGINT}
FROM DUAL)
</foreach>
</insert>