回調
JdbcTemplate類支持的回調類:
1.預編譯語句及存儲過程創建回調:用於根據JdbcTemplate提供的連接創建相應的語句;
1.1 PreparedStatementCreator
<T> T execute(PreparedStatementCreator psc, PreparedStatementCallback<T> action)
PreparedStatementCreator:通過回調獲取JdbcTemplate提供的Connection,由用戶使用該Conncetion創建相關的PreparedStatement;
Integer count = jdbcTemplate.execute(
new PreparedStatementCreator() {
@Override
public PreparedStatement createPreparedStatement(Connection con) throws SQLException {
return con.prepareStatement("SELECT count(1) FROM student");//**拓展點1,改寫sql
}
},
new PreparedStatementCallback<Integer>() {
@Override
public Integer doInPreparedStatement(PreparedStatement ps) throws SQLException, DataAccessException {
ResultSet resultSet = ps.executeQuery();
resultSet.next();
return resultSet.getInt(1);//**拓展點2,改寫返回值
}
});
1.2 PreparedStatementCreator 處理存儲過程
略
2.預編譯語句設值回調:用於給預編譯語句相應參數設值;
2.1 PreparedStatementSetter:
public int update(String sql, PreparedStatementSetter pss) throws DataAccessException
通過回調獲取JdbcTemplate提供的PreparedStatement,由用戶來對相應的預編譯語句相應參數設值;
jdbcTemplate.update("INSERT INTO student(id,name) VALUES (?,?)", new PreparedStatementSetter() {
@Override
public void setValues(PreparedStatement ps) throws SQLException {
ps.setInt(1, 11);
ps.setString(2, "小張");
}
});
此拓展點可以設置SQL的參數值
2.2BatchPreparedStatementSetter:;
類似於PreparedStatementSetter,但用於批處理,需要指定批處理大小;
自定義功能回調:提供給用戶一個擴展點,用戶可以在指定類型的擴展點執行任何數量需要的操作;
ConnectionCallback:通過回調獲取JdbcTemplate提供的Connection,用戶可在該Connection執行任何數量的操作;
StatementCallback:通過回調獲取JdbcTemplate提供的Statement,用戶可以在該Statement執行任何數量的操作;
PreparedStatementCallback:通過回調獲取JdbcTemplate提供的PreparedStatement,用戶可以在該PreparedStatement執行任何數量的操作;
CallableStatementCallback:通過回調獲取JdbcTemplate提供的CallableStatement,用戶可以在該CallableStatement執行任何數量的操作;
結果集處理回調:通過回調處理ResultSet或將ResultSet轉換爲需要的形式;
RowMapper:用於將結果集每行數據轉換爲需要的類型,用戶需實現方法mapRow(ResultSet rs, int rowNum)來完成將每行數據轉換爲相應的類型。
RowCallbackHandler:用於處理ResultSet的每一行結果,用戶需實現方法processRow(ResultSet rs)來完成處理,在該回調方法中無需執行rs.next(),該操作由JdbcTemplate來執行,用戶只需按行獲取數據然後處理即可。
ResultSetExtractor:用於結果集數據提取,用戶需實現方法extractData(ResultSet rs)來處理結果集,用戶必須處理整個結果集;