0

我有一些代码,看起来像这里的示例(Spring 3.1)。它工作得很好。

但我想知道是否有一种更像 Spring 的方式来返回我刚刚插入的密钥(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();
          }

  }
4

0 回答 0