Java 不确定如何使用Spring jdbcTemplate和PreparedStatementSetter返回生成的列id值

Java 不确定如何使用Spring jdbcTemplate和PreparedStatementSetter返回生成的列id值,java,spring,jdbc,Java,Spring,Jdbc,重构之前,我使用jdbcTemplate、preparedStatementCreator和GeneratedKeyHolder将一行插入数据库,以存储插入行的生成id jdbcTemplate.update(SomePreparedStatementCreator, generatedKeyHolder) 但是,现在我尝试使用jdbcTemplate执行更新,但现在使用preparedStatementSetter。对于这个us jdbcTemplate.update(Strin

重构之前,我使用jdbcTemplate、preparedStatementCreator和GeneratedKeyHolder将一行插入数据库,以存储插入行的生成id

    jdbcTemplate.update(SomePreparedStatementCreator, generatedKeyHolder)  
但是,现在我尝试使用jdbcTemplate执行更新,但现在使用preparedStatementSetter。对于这个us jdbcTemplate.update(String sql,PreparedStatementSetter),我能看到的唯一方法是,但是现在我不确定如何返回生成列的id

    PreparedStatementSetter pss = new PreparedStatementSetter() {
        @Override
        public void setValues(PreparedStatement preparedStatement)
                throws SQLException {
            preparedStatement.setString(1, pupil.getFirstname());
            preparedStatement.setString(2, pupil.getSurname());
            preparedStatement.setString(3, pupil.getGivenName());
            preparedStatement.setDate(4, pupil.getDob());
        }
    };      


    jdbcTemplate.update("INSERT INTO STUDENTS "+ "(FIRSTNAME, SURNAME, GIVEN_NAME, DOB) VALUES (?,?,?,?)",pss);

假设我对preparedStatements的处理方法是正确的,有人知道我如何返回生成的id的值吗?

生成的键可以使用方法返回。但要实现这一点,您需要根据需要更改您的请求

相反,我建议使用它来插入实用程序类

如果您的DB字段与实体的字段完全相同,则只需执行以下操作:

Number key = jdbcInsert.executeAndReturnKey(new BeanPropertySqlParameterSource(entity));
//set generated key
if (key != null){
    entity.setId(key.longValue());
}
SimpleJdbcInsert jdbcInsert = new SimpleJdbcInsert(getJdbcTemplate());

jdbcInsert.withTableName(entityName); //e.g. "STUDENTS"

jdbcInsert.setGeneratedKeyName(idColumn); //e.g. "ID"

jdbcInsert.setColumnNames(columnNames); //e.g. Arrays.asList("FIRSTNAME", "SURNAME", "GIVEN_NAME", "DOB")
如果不是(像你的情况一样),那么


如果你需要的话,请考虑接受这个答案。
SimpleJdbcInsert jdbcInsert = new SimpleJdbcInsert(getJdbcTemplate());

jdbcInsert.withTableName(entityName); //e.g. "STUDENTS"

jdbcInsert.setGeneratedKeyName(idColumn); //e.g. "ID"

jdbcInsert.setColumnNames(columnNames); //e.g. Arrays.asList("FIRSTNAME", "SURNAME", "GIVEN_NAME", "DOB")