@Insert("insert into BANDWIDTH_PRELOAD(CHANNEL_ID,DAY,TIME_NUM,COUNT,FILESIZE) values(#{channel_id},to_date(#{day},'yyyy-mm-dd'),#{time_num},#{count},#{filesize})") public void addData(PreData data);
具体实现类
private void batchInsert(List<PreData> dataList) throws Exception { long executeStart = System.currentTimeMillis(); SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH); PreloadMapper preloadMapper = sqlSession.getMapper(PreloadMapper.class); try { for (PreData data : dataList) { preloadMapper.addData(data); } sqlSession.commit(); } finally { sqlSession.close(); } logger.info("batchInsert cost " + (System.currentTimeMillis() - executeStart) + "ms"); }
第二种方法,效率比第一种差,但是更优雅
<insert id="addDatas"> insert into ABROAD_AGENT_BILL(CHANNEL_ID,ABROAD_AGENT_ID,BUSINESSTYPE,DAY,DATA,INDATA) <foreach collection="datas" item="data" index="index" separator="union all"> SELECT #{data.channelID},#{data.abroadAgent},#{data.businessType},to_date(#{data.day},'yyyy-mm-dd hh24:mi:ss'),#{data.outdata},#{data.indata} from dual </foreach> </insert>
public void addDatas(@Param("datas") AbroadBandwidth[] datas);