1. 程式人生 > >100w+ mybatis+mysql批量新增實現方式

100w+ mybatis+mysql批量新增實現方式

    /**
     * 批量插入的數量需要根據效能而定
     */
    private static Integer BATCH_INSERT_MAX_SIZE = 100;

    /**
     * 批量插入
     *
     * @param fileHandleList
     */
    protected void insertBatch(List<FileHandle> fileHandleList) {
        int pageSize = BATCH_INSERT_MAX_SIZE;
        int pageNo = fileHandleList.size() / pageSize;

        List subList;
        if (fileHandleList.size() <= pageSize) {
            fileHandleMapper.batchInsert(fileHandleList);
        } else {
            for (int i = 0; i < pageNo; i++) {
                subList = fileHandleList.subList(0, pageSize);
                fileHandleMapper.batchInsert(subList);
                fileHandleList.subList(0, pageSize).clear();
            }
            if(list.size()>0){
                    fileHandleMapper.batchInsert(fileHandleList);
                }
        }
    }

    <insert id="batchInsert">
        INSERT INTO t_file_handle(id,fileId, data, tag,`status`, logicType, creTime, updTime)
        VALUES
        <foreach collection="list" item="item" index="index" separator=",">
            (#{item.id},#{item.fileId},#{item.data},#{item.tag},#{item.status},#{item.logicType},#{item.creTime},#{item.updTime})
        </foreach>
    </insert>

 100w+資料儲存mysql。由於mysql每次新增時slq長度限制為4M(跟版本有關,可配置)大小,故對sql進行了拆分,僅做記錄。