我有一些代码,这个样本在这里(Spring 3.1) . 它工作得很好 .

但我想知道是否有更多的Spring-ish方式返回我刚插入的密钥(Oracle nextval) . 也许这是最好也是唯一的方法,但它似乎并不符合 Spring 天的精神(例如较少的冗长) .

我查看了SimpleJdbcTemplate,但从3.1开始不推荐使用

import java.sql.Connection;
  import java.sql.PreparedStatement;
  import java.sql.SQLException;

  import javax.sql.DataSource;

  import org.springframework.jdbc.core.JdbcTemplate;
  import org.springframework.jdbc.core.PreparedStatementCreator;
  import org.springframework.jdbc.support.GeneratedKeyHolder;
  import org.springframework.jdbc.support.KeyHolder;

  public class EmployeeDaoImpl implements EmployeeDao {

          private DataSource dataSource;

          private JdbcTemplate jdbcTemplate;

          public void setDataSource(DataSource dataSource) {
                  this.dataSource = dataSource;
                  this.jdbcTemplate = new JdbcTemplate(this.dataSource);
          }

          public int insertEmployee() {
                  final String INSERT_SQL = "insert into trn_employee (first_name,last_name) values(?,?)";

                  KeyHolder keyHolder = new GeneratedKeyHolder();
                  jdbcTemplate.update(new PreparedStatementCreator() {
                          public PreparedStatement createPreparedStatement(
                                          Connection connection) throws SQLException {
                                  PreparedStatement ps = connection.prepareStatement(INSERT_SQL,
                                                  new String[] { "employee_id" });
                                  ps.setString(1, "George");
                                  ps.setString(2, "Harrison");
                                  return ps;
                          }
                  }, keyHolder);

                  return keyHolder.getKey().intValue();
          }

  }