1. 程式人生 > >jdbcTemplate高效批量插入和批量更新

jdbcTemplate高效批量插入和批量更新

批量插入(資料量超一萬時建議分批次提交,每次一萬條)

/**
 * 生成goodsIssue的幸運碼<大量資料一次性插入>
 * @param goodsIssue
 * @author Nifury
 */
public void insertLotteryNumbers(GoodsIssue goodsIssue) {
    String prefix = "INSERT INTO `lottery_number` (`goods_id`, `periods`,`luck_number`, `create_time`, `status`, `issue_id` ) VALUES \n";
    StringBuffer suffix = new StringBuffer();
    Timestamp now = new Timestamp(System.currentTimeMillis());
    for (int i = 0; i < goodsIssue.getTotalShare(); i++) {
         suffix.append("("
            + goodsIssue.getGoodsId() + ","
            + goodsIssue.getPeriods() + ","
            + (10000001+i) + ",'"
            + now.toString() + "',"
            + 1 + ","
            + goodsIssue.getIssueId()
            +")\n,"); 
    }
    // 構建完整sql  
    String sql = prefix + suffix.substring(0, suffix.length() - 2);
    jdbcTemplate.update(sql);
}

批量更新(資料量超一萬時建議分批次提交,每次一萬條)

/**
 * 批量更新從csv檔案中讀取的資料
 * 說明:會根據主鍵忽略重複資料
 * @param orderInfoList
 */
public void updateWinnerList(List<String> orderInfoList) {
    String prefix ="INSERT INTO `one_winner`(`winner_id`,`express_company`,`express_order`) VALUES \n";
    StringBuffer suffix = new StringBuffer();
    for (int i = 1,length = orderInfoList.size(); i < length; i++) {
        String oneWinner = orderInfoList.get(i);
        String[] ary = oneWinner.split(",");
        suffix.append("('"+ary[0]+"','"+ary[11]+"','"+ary[12]+"')\n,");
    }
    String sql = prefix+suffix.substring(0, suffix.length() - 2)+
            "on duplicate key update `express_company`=values(`express_company`),`express_order`=values(`express_order`)";
    jdbcTemplate.update(sql);
}