我有一些代码,看起来像这里的示例(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();
}
}