Spring中getJdbcTemplate()批量SQL实现

public void batchUpdateByEvIdtl(final List<EvenementsEvents> events) throws SfjDaoException {
		try {
			getJdbcTemplate().batchUpdate(updateEventByEvIdtlSql, new BatchPreparedStatementSetter() {

				@Override
				public void setValues(PreparedStatement ps, int i) throws SQLException {
					EvenementsEvents event = events.get(i);
					ps.setLong(COL_1, event.getEvIdtl());
					ps.setLong(COL_2, event.getEvId());
				}

				@Override
				public int getBatchSize() {
					return events.size();
				}
			});
		} catch (JDBCException e) {
			LOGGER.error("Dao Error", e);
			throw new SfjDaoException(e);
		}

	}

 

//应用场景:
如以下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     }
复制代码

 

你可能感兴趣的:(JdbcTemplate)