擴展String JdbcTemplate獲得插入數據的主鍵
String自帶的獲得主鍵方法比較繁瑣,所以自己寫了一個方法來和大家分享
import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException;import javax.sql.DataSource;
import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.ParameterDisposer; import org.springframework.jdbc.core.PreparedStatementCreator; import org.springframework.jdbc.core.PreparedStatementSetter; import org.springframework.jdbc.core.RowMapper; import org.springframework.jdbc.support.GeneratedKeyHolder; import org.springframework.jdbc.support.KeyHolder;
/**
- 數據存取適配器
@author David Day */ public class JdbcTemplateAdapter extends JdbcTemplate {
public JdbcTemplateAdapter() {
super();
}
public JdbcTemplateAdapter(DataSource ds) {
super(ds);
}
/**
- 增加并且獲取主鍵
- @param sql sql語句
- @param params 參數列表
@return 主鍵 */ public Object insertAndGetKey(final String sql, final Object... params) { logger.debug("Executing SQL update and returning generated keys");
final KeyHolder key = new GeneratedKeyHolder();
update(new PreparedStatementCreator() {
public PreparedStatement createPreparedStatement(Connection con) throws SQLException { PreparedStatement ps = con.prepareStatement(sql, PreparedStatement.RETURN_GENERATED_KEYS); PreparedStatementSetter pss = newArgPreparedStatementSetter(params); try { if (pss != null) { pss.setValues(ps); } } finally { if (pss instanceof ParameterDisposer) { ((ParameterDisposer) pss).cleanupParameters(); } } return ps; }
}, key);
return key.getKey(); }
}</pre>