如何返回生成的UUID主键

时间:2019-06-25 20:09:01

标签: java spring uuid jdbctemplate

我正在使用mySQL数据库,并且该表具有由数据库引擎生成的UUID格式的主键。我正在使用Spring框架 JdbcTemplate https://docs.spring.io/spring/docs/current/javadoc-api/index.html?org/springframework/jdbc/core/JdbcTemplate.html)来执行所有操作。但是在插入时,我确实需要将主键返回给调用者。 JdbcTemplate 具有方法 公共int更新(PreparedStatementCreator psc,KeyHolder生成的KeyHolder) 但它仅返回整数键。 KeyHolder 界面也仅允许数字键。 有人知道如何克服这一缺陷吗?我应该使用JdbcTemplate以外的其他东西吗?这是不希望的,但可能的。 请给我一个提示。

3 个答案:

答案 0 :(得分:0)

您可以通过这种方式使用它来获取非数字键

[2, 4, 6, 8, 10]
[5, 10]
[]

答案 1 :(得分:0)

这对我有用!

public String save(SysUser sysUser) {
    String SQL = "INSERT INTO sys_user(id,account_number,telephone,email,real_name) VALUES (?,?,?,?,?);";
    KeyHolder keyHolder = new GeneratedKeyHolder();
    jdbcTemplate.update(connection -> {
        PreparedStatement preparedStatement = connection.prepareStatement(SQL, new String[]{"id"});
        preparedStatement.setString(1, sysUser.getId());
        preparedStatement.setString(2, sysUser.getAccountNumber());
        preparedStatement.setString(3, sysUser.getTelephone());
        preparedStatement.setString(4, sysUser.getEmail());
        preparedStatement.setString(5, sysUser.getRealName());
        return preparedStatement;
    }, keyHolder);
    return String.valueOf(keyHolder.getKeyList().get(0).get("id"));
}

答案 2 :(得分:0)

一种实现方法是预先在Java中创建UUID,然后将其传递给(SQL / DB),因此在这种情况下,您已经知道什么将成为主键。因为从理论上讲UUID是唯一的,所以不应该发生冲突。

UUID uuid = UUID.randomUUID();
jdbcTemplate.update("INSERT INTO users ( user_uuid , first_name , last_name) VALUES (?,?,?)",
                "admin", uuid, user.getFirstName(), user.getLastName());
//uuid: you already have the PrimeryKey in advance
相关问题