? 通過JdbcTemplate.update()方法將KeyHolder傳進來,經過一系列操作,由PreparedStatement.getGeneratedKeys()獲取主鍵,并將值注入到KeyHolder中(注意:通過KeyHolder獲取插入主鍵方法,僅在jdbc 3.0才被支持)
具體源碼如下:
public Integer doInPreparedStatement(PreparedStatement ps) throws SQLException {
int rows = ps.executeUpdate();List> generatedKeys =generatedKeyHolder.getKeyList();generatedKeys.clear();ResultSet keys = ps.getGeneratedKeys();if (keys != null) {
? try {
? RowMapperResultSetExtractor> rse =new RowMapperResultSetExtractor>(getColumnMapRowMapper(), 1);generatedKeys.addAll(rse.extractData(keys));
}finally {JdbcUtils.closeResultSet(keys);}
}
? if (logger.isDebugEnabled()) {
? logger.debug("SQL update affected " + rows + " rows and returned " + generatedKeys.size() + " keys");
?? }
?? return rows;
}