mybatis 批量 insert (oracle)

mapper中配置
    @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);

猜你喜欢

转载自hbjava1985.iteye.com/blog/2046142
今日推荐