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对应的?加上