Spring中getJdbcTemplate()批量SQL实现


//应用场景:
如以下SQL :
String sql = "INSERT INTO to_order_return_info VALUES(seq_order_return_info.nextval,?,?,?,?,?,?)";
该语句为向to_order_return_info表中插入新记录

但如需要N条数据插入 正常的方案为 执行N次插入数据操作
jdbc 支持批量SQL 可以进行同数据批量操作 以及混合数据批量操作
Spring 对jdbc进行了封装 同样支持批量操作 
以下为同数据(插入到统一个表中的数据) 批量操作:

需要用到batchUpdate();方法
和BatchPreparedStatementSetter接口
实现getBatchSize();以及setValues 方法

getBatchSize();返回批量条数 也就是执行多少次增删改操作; 
setValues(PreparedStatement ps, int i)
该方法会自动通过i遍历List 取出相应的增删改数据 
 1 public int orderReturnOperate(final List<Order_Return_Info> orders)  2 throws BaseException {  3  4 try {  5 String[] orderNums = new String[orders.size()];  6 for (int j = 0; j < orderNums.length; j++) {  7 if (orders.get(j) != null) {  8 orderNums[j] = orders.get(j).getOrderNum();  9 } else { 10 log.info("orderNum为null!"); 11 return -1; 12  } 13  } 14 updateOrderItemsStatus(orderNums, orders.get(0) != null ? orders 15 .get(0).getOrderStatus() : "2014"); 16 17 String queryStatusSql = "SELECT f_status_name FROM to_order_status WHERE f_status_num = ?"; 18 final String statusName = (String) this.getJdbcTemplate() 19  .queryForObject(queryStatusSql, 20 new Object[] { orders.get(0).getOrderStatus() }, 21 String.class); 22 String sql = "INSERT INTO to_order_return_info VALUES(seq_order_return_info.nextval,?,?,?,?,?,?)"; 23 //执行批量sql 处理多次插入操作 24 int[] count = this.getJdbcTemplate().batchUpdate(sql, 25 new BatchPreparedStatementSetter() { 26 27  @Override 28 //执行次数 29 public int getBatchSize() { 30 return orders.size(); 31  } 32 33  @Override 34 //执行参数 35 public void setValues(PreparedStatement ps, int i) 36 throws SQLException { 37 ps.setString(1, orders.get(i).getOrderNum()); 38 ps.setString(2, orders.get(i).getOrderStatus()); 39 ps.setString(3, statusName); 40 ps.setString(4, orders.get(i).getOpId()); 41 ps.setString(5, orders.get(i).getOpName()); 42 ps.setString(6, orders.get(i).getConfirmTime()); 43  } 44 45  }); 46 } catch (Exception e) { 47  log.info(e.getMessage()); 48 return -1; 49  } 50 return 1; 51 }
复制代码

你可能感兴趣的:(Spring中getJdbcTemplate()批量SQL实现)