zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    Hibernate- 连接查询
    Hibernate- 条件查询
    Hibernate- 分页查询
    Hibernate- 动态实例查询
    java- 控制double输出的小数点位数
    Hibernate- 基本查询
    Hibernate- 开发环境准备
    Hibernate- HQL查询方式
    Hibernate-【查询】
    Hibernate- 多对多
  • 原文地址:https://www.cnblogs.com/cnjava/p/2919124.html
Copyright © 2011-2022 走看看