微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

在重构之前,我使用jdbcTemplate,preparedStatementCreator和GeneratedKeyHolder在数据库中插入一行来存储生成的插入行的id.

    jdbcTemplate.update(SomePreparedStatementCreator, generatedKeyHolder)  

但是,现在我尝试使用我的jdbcTemplate执行更新,但现在使用preparedStatementSetter.我能看到的唯一方法是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);

假设我对prepareStatements的方法是正确的,有谁知道如何返回生成的id的值?

解决方法:

生成的密钥可以使用JdbcTemplate#update(PreparedStatementCreator,KeyHolder)方法返回.但要实现这一点,您需要根据org.springframework.jdbc.core.PreparedStatementCreatorFactory更改您的请求.

相反,我建议使用插入SimpleJdbcInsert实用程序类.

如果您的数据库字段与实体的字段完全相同,那么您可以执行以下操作:

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

如果不是(如你的情况),那么

//define parameters
Map<String, Object> parameters = new HashMap<String, Object>();
parameters.put("FirsTNAME", pupil.getFirstname());
parameters.put("SURNAME", pupil.getSurname());
parameters.put("GIVEN_NAME", pupil.getGivenname());
parameters.put("dob", pupil.getdob());
//execute insert
Number key = jdbcInsert.executeAndReturnKey(new MapsqlParameterSource(parameters));
//set generated key
if (key != null){
    pupil.setId(key.longValue());
}

您需要为每个实体定义一次jdbcInsert参数,它将如下所示:

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")

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐