jdbcTemplate高效批量插入和批量更新
阿新 • • 發佈:2019-02-09
批量插入(資料量超一萬時建議分批次提交,每次一萬條)
/** * 生成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); }