public static long insertAndReturnId(JdbcTemplate jdbcTemplate,String sql, List<Object> params){
// 必须要有keyHolder
KeyHolder keyHolder = new GeneratedKeyHolder();
// 改写如下
jdbcTemplate.update(new PreparedStatementCreator() {
@Override
public PreparedStatement createPreparedStatement(Connection connection) throws SQLException {
PreparedStatement ps = connection.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
int i = 1;
// 自增主键为null
ps.setObject(i, null);
for (Object p : params){
i++;
// 用Object可以添加null参数
ps.setObject(i, p);
}
return ps;
}
}, keyHolder);
// 返回主键id
return Long.parseLong(Objects.requireNonNull(keyHolder.getKey()).toString());
}
例子:
public Long addSysUser(ManageSysUser manageSysUser) {
String sql = "insert into general_sys_user(id,username,name) "
+ “values(?,?,?)”;
List params = new ArrayList();
params.add(manageSysUser.getUsername());
params.add(manageSysUser.getName());
return JdbcTemplateUtils.insertAndReturnId(jdbcTemplate,sql,params);
}
记住sql里的values要把id对应的?加上
该博客介绍了一个Java方法,通过JdbcTemplate更新SQL并返回自增主键的值。示例展示了如何在插入数据时设置自增主键为null,并使用KeyHolder获取生成的主键ID。此方法适用于需要获取插入操作后生成的主键的情景。

5843

被折叠的 条评论
为什么被折叠?



