Spring的批量處理

來源:互聯網
上載者:User

由於資料的批量處理(比如往RDBMS插入幾萬條資料)非常耗資源,因此建議在所有場合能夠藉助於JDBC完成,而不要去採用Hibernate API。本文主要圍繞Spring內建的各類JDBC API抽象支援展開的。

1.1.  JdbcTemplate內建的batchUpdate(final String[] sql)

這一方法適合於小批量資料的CUD(增、更新、刪除)操作,而且SQL類型不限。由於其內部使用了Statement語句,所以資料的操作效率一般。

1.2.  JdbcTemplate內建的batchUpdate(String sql, final BatchPreparedStatementSetter pss)這一方法也僅僅適合於小批量資料的CUD(增、更新、刪除)操作,但始終是同一SQL(參數具有多樣性)。由於其內部使用了PreparedStatement語句,所以資料的操作效率還是不錯的。下面給出了操作樣本:

final int[] no = new int[]{7369,7499,7521,7566,7654,7698};
jt.batchUpdate("update emp set sal = ? where empno = ?",  //註:在oracle資料背景下,該方法的傳回值失效(always -2)
          new BatchPreparedStatementSetter(){
                    public void setValues(PreparedStatement ps, int i)throws SQLException {
                        ps.setInt(1, no[i]);
                        ps.setFloat(2, no[i]);
                    }
                    public int getBatchSize() {
                        return no.length;
                    }
          });

1.3.  BatchSqlUpdate

這一方法適合於各種批量資料的CUD(增、更新、刪除)操作,但始終是同一SQL(參數具有多樣性)。由於其內部使用了PreparedStatement語句,所以資料的操作效率還是不錯的。下面給出了操作樣本:

DataSource ds = gbfa.getBean("dataSource");
final int[] no = new int[]{7369,7499,7521,7566,7654,7698};
BatchSqlUpdate bsu = new BatchSqlUpdate(ds, "update emp set sal=? where empno = ?");
bsu.setBatchSize(4);
bsu.setTypes(new int[]{Types.FLOAT, Types.INTEGER});
for(int i = 0; i < no.length; ++i){
 log.info(bsu.update(new Object[]{no[i],no[i]})) ; ////註:在oracle資料背景下,該方法的傳回值失效(always -1)
}
bsu.flush();

       同JdbcTemplate內建的batchUpdate(String sql, final BatchPreparedStatementSetter pss)相比,BatchSqlUpdate會自動分批待批量處理的資料。比如,如果需要大量操作10萬條資料,則可以控制其batchSize,從而在時間(RDBMS可知性)和空間(記憶體)上達到平衡。
       務必注意,在使用BatchSqlUpdate的最後,不要忘記手工調用其暴露的flush()方法。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.